【问题标题】:Promise returning a function instead of an objectPromise 返回一个函数而不是一个对象
【发布时间】:2018-05-30 07:14:04
【问题描述】:

我正在使用节点模块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 不是特别有经验,我觉得问题出在某个地方。非常感谢任何帮助!

【问题讨论】:

  • newUser.constructor 应该指向 User 所以输出看起来是正确的?
  • newUser.constructor 指向[Function: User] 而不是实际的User,我不知道为什么
  • newUser.constructor 返回函数,newUser.constructor.name 返回类的名称
  • ? someObject.constructor 始终指向创建 somObject 的构造函数。 [Function: User] 对于名为 User 的函数来说似乎是一个不错的输出。
  • 哦,我明白了。我也尝试过记录newUser.firstName 及其属性,但这些错误不断弹出:[ts] Property 'firstName' does not exist on type '{}'.

标签: javascript typescript promise es6-promise


【解决方案1】:

Typescript 无法推断出实际的 Promise 类型,因此默认为某些类型 - 在本例中为 {}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2015-11-26
    • 1970-01-01
    • 2011-11-13
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多