【问题标题】:How to call one Promise function from another Promise function in Angular 2?如何从 Angular 2 中的另一个 Promise 函数调用一个 Promise 函数?
【发布时间】:2016-08-23 20:43:11
【问题描述】:

我有一个返回 Promise 的函数需要调用另一个返回 Promise 的函数:

getUser(): Promise<User> {
    this.getAPIUser().then(result => {
        ..Do some stuff with result..
        return Promise.resolve(result);  // This doesn't work
    });
}

getAPIUser(): Promise<User> {
    return Promise.resolve({ firstName: 'Jason' });
}

我认为这不起作用,因为 getUser "return Promise.resolve" 在 getAPIUser then 处理程序的上下文中。这在 Angular 1 中非常简单,您只需实例化一个 $q 对象,然后在需要的地方解析该对象。我不知道 Angular 2/Typescript/EM6 中的等价物是什么。

任何帮助将不胜感激。

【问题讨论】:

  • 你不是错过了 getUser() 中的返回吗?

标签: javascript angular typescript promise


【解决方案1】:

您的 getUser 方法根本不返回承诺。
当您在 promise 上调用 then 方法时,它会返回 Promise ,这就是您的方法需要返回的内容:

getUser(): Promise<User> {
    return this.getAPIUser().then(result => {
        ..Do some stuff with result..
        return result;
    });
}

【讨论】:

  • 叹气,是啊,我发帖后就想通了,但你们比我还快! StackOverflow 永远不会停止惊奇。如果允许,我会在 6 分钟内接受你的回答。谢谢!
【解决方案2】:

为了完整起见,这也适用:

getUser(): Promise<User> {
    return new Promise((resolve) => {
        this.getAPIUser().then(user => {
            resolve(user);
        })
    });
}

【讨论】:

  • 这个解决方案创建了一个额外的Promise,因为你的getUser函数本身不是异步的,它只是异步的,因为它调用了异步getAPIUser
  • 啊,好点子。如果 getUser 需要返回不同的信息,这是否是这样做的方法,或者 getAPIUser 的承诺中的返回是否可以更改?
  • promises api 的好处是它们可以被链接。所以then 方法返回一个Promise,你也可以在上面then。您在一个承诺中返回的内容将是下一个承诺的内容,因此您实际上可以更改链的结果。
  • 哦,明白了!这很有意义,谢谢 Nitzan!
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2019-02-17
  • 2017-12-20
  • 2015-05-30
相关资源
最近更新 更多