如何使用链式调用 Promise?

How to use chain calls Promise?

现在在 .then 部分我所有另一个承诺 http 请求:

.then(result => { this.service().then(data => {}); });

这是使用链式承诺的正确方法吗?

差不多!您需要 return 函数中的承诺,或者像这样:

.then(result => { return this.service().then(data => {}); });

或者像这样:

.then(result => this.service().then(data => {}));

是的,你的两个承诺是按顺序解决的。但请记住,您的第二个(内部)承诺只会在第一个承诺成功解决后才会被调用。

一个更简洁的解决方案是:

.then(result => this.service()).then(data => {});

正如 Hrishi 在 this SO answer 中阐述的那样,在 then() 函数中返回一个 "thenable"(例如 Promise),使旧承诺采用新承诺的状态。

由于您使用的是 Typescript,因此您可以使用 async/await 以更易读的方式链接承诺:

function firstCall(): Promise<any> { /* return a promise */ }
function service(): Promise<any>{ /* return a promise */ }

async function runPromisses() {
    var result = await firstCall();
    var data = await service();
    // ...
}