Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular promise.finally()调用时出错_Javascript_Angularjs_Angular_Promise - Fatal编程技术网

Javascript Angular promise.finally()调用时出错

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

我有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(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"));