我有角度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
如何解决这个问题,以便在我的承诺链完成之后我终于不会发生?
答案 0 :(得分:3)
因为您已立即致电console.log('finally')
,
替换:
.finally(console.log('finally'))
使用:
.finally(() => console.log('finally'))
修改强>
来自docs:
Promise.prototype.finally
将callback
作为参数,当承诺结算时,无论是已履行还是拒绝,都会执行指定的回调函数。
答案 1 :(得分:1)
finally子句应该接收回调函数。在你的代码中,你正在调用函数,而不是传递它:console.log('finally')
立即调用函数。
可能的解决方案是使用匿名函数:
finally(() => {
console.log("finally");
});
甚至更短:
finally(() => console.log("finally"));