ค้นหาเว็บไซต์

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) => {
    //...
})