如何使用连锁电话承诺?

时间:2017-08-28 20:17:27

标签: angular typescript promise angular-promise

现在在.then部分,我所有人都承诺http请求:

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

使用链式承诺是否正确?

3 个答案:

答案 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),使旧的承诺采用新承诺的状态。