承诺返回函数而不是对象

时间:2018-05-30 07:14:05

标签: javascript typescript promise es6-promise

我正在使用节点模块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 个答案:

答案 0 :(得分:2)

Typescript无法推断实际的承诺类型,因此默认为某种东西 - 在这种情况下为{}

您应该明确Promise并创建Promise<User>类型,即

const newUser = await new Promise<User>((resolve, reject) => {
    //...
})