javascript - Promise คืนค่าฟังก์ชันแทนวัตถุ
ฉันกำลังใช้โมดูล Node fbgraph เพื่อดึงข้อมูลจากผู้ใช้ Facebook และสร้างบัญชีในแอปของเรา
ฉันมีโค้ดดังต่อไปนี้ซึ่งถูกห่อไว้ภายในฟังก์ชันแบบอะซิงค์:
const newUser = await new Promise((resolve, reject) => {
graph.get(url, (err, res) => {
if (err) {
return reject(err);
}
const user = new User();
user.firstName = res.first_name;
user.lastName = res.last_name;
user.email = res.email;
return resolve(user);
});
});
this.register(newUser);
ฉันไม่สามารถส่งตัวแปร newUser ไปยังฟังก์ชันลงทะเบียนของฉันได้ และได้รับข้อผิดพลาดนี้:
Argument of type '{}' is not assignable to parameter of type 'User'.
เมื่อทำการล็อก newUser มันปรากฏว่าเป็นอ็อบเจ็กต์ User ที่ถูกต้องตามที่ฉันคาดไว้ แต่เมื่อฉันล็อก newUser.constructor มันปรากฏว่าสิ่งที่ถูกส่งคืนจริงๆ คือ [Function: User]
ฉันไม่ได้มีประสบการณ์มากเกี่ยวกับ Promises และฉันรู้สึกว่าปัญหาอยู่ที่นั่น จะช่วยอะไรได้มากถ้ามีใครช่วย!
คำตอบ #1
Typescript ไม่สามารถสรุปประเภทของ promise ที่แท้จริงได้ ดังนั้นจึงใช้ค่าเริ่มต้นบางอย่าง - ในกรณีนี้คือ {}
คุณควรระบุอย่างชัดเจนเกี่ยวกับ Promise และสร้างประเภท Promise<User> เช่น
const newUser = await new Promise<User>((resolve, reject) => {
//...
})
