现在在.then
部分,我所有人都承诺http请求:
.then(result => { this.service().then(data => {}); });
使用链式承诺是否正确?
答案 0 :(得分:5)
几乎!你需要在函数中返回promise,如下所示:
.then(result => { return this.service().then(data => {}); });
或者像这样:
.then(result => this.service().then(data => {}));
答案 1 :(得分:2)
由于您使用的是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();
// ...
}
答案 2 :(得分:1)
是的,你的两个承诺会按顺序解决。但请记住,只有当第一个(内部)承诺成功解决时,才会调用您的第二个(内部)承诺。
更清洁的解决方案是:
.then(result => this.service()).then(data => {});
正如Hrishi在this SO answer中详细阐述的那样,在你的then()
函数中返回一个“thenable”(例如一个Promise),使旧的承诺采用新承诺的状态。