Angular promise .finally()调用乱序

时间:2018-02-05 22:37:17

标签: javascript angularjs angular promise

我有角度1.6 ES6代码执行此操作

service.get()
.then((data) => {
    console.log('one')
    //arbitrary stuff
    return service.get()
})
.then((data) => {
    console.log('two')
    //more stuff
})
.catch((err) => {
    //handle err
})
.finally(console.log('finally'))

我希望从控制台获取此信息:

one
two
finally

但实际得到的是:

finally
one
two

如何解决这个问题,以便在我的承诺链完成之后我终于不会发生?

2 个答案:

答案 0 :(得分:3)

因为您已立即致电console.log('finally')

替换:

.finally(console.log('finally'))

使用:

.finally(() => console.log('finally'))

修改

来自docs

Promise.prototype.finallycallback作为参数,当承诺结算时,无论是已履行还是拒绝,都会执行指定的回调函数。

答案 1 :(得分:1)

finally子句应该接收回调函数。在你的代码中,你正在调用函数,而不是传递它:console.log('finally')立即调用函数。

可能的解决方案是使用匿名函数:

finally(() => {
    console.log("finally");
});

甚至更短:

finally(() => console.log("finally"));