Javascript Angular promise.finally()调用时出错
我有angular 1.6ES6代码可以实现这一点Javascript Angular promise.finally()调用时出错,javascript,angularjs,angular,promise,Javascript,Angularjs,Angular,Promise,我有angular 1.6ES6代码可以实现这一点 service.get() .then((data) => { console.log('one') //arbitrary stuff return service.get() }) .then((data) => { console.log('two') //more stuff }) .catch((err) => { //handle err }) .finally(co
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
我如何扭转局面,使我的最终承诺在我的承诺链完成之前不会发生?因为您正在调用
console.log('finally')
替换:
.finally(console.log('finally'))
与:
编辑
从:
Promise.prototype.finally
将回调
作为一个参数,当承诺得到满足或拒绝时,将执行指定的回调函数。finally子句应接收回调函数。在代码中,您正在调用函数,而不是传递它:console.log('finally')
立即调用函数
可能的解决方案是使用匿名函数:
finally(() => {
console.log("finally");
});
甚至更短:
finally(() => console.log("finally"));
你叫它。我认为我不需要在这些链中()=>因为在轮到他们之前他们不会被调用。你能解释一下或者给我指出一些解释这些案例之间区别的东西吗?我并不完全清楚。@DerekChadwell您必须记住,
.finally()
是一个函数,而不是一个语言构造。因此,您在这些()
之间放置的内容将立即作为参数进行计算。您的原始代码中有一个函数调用,因此函数调用作为.finally()
函数的参数进行计算。Daniel的正确答案将箭头函数(匿名函数)作为回调传递,在promise引擎确定它应该执行之前,不会执行回调。
finally(() => console.log("finally"));