Angular promise .finally() 无序调用

Der*_*ell 2 javascript promise angularjs angular

我有执行此操作的 Angular 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'))
Run Code Online (Sandbox Code Playgroud)

我想从控制台得到这个:

one
two
finally
Run Code Online (Sandbox Code Playgroud)

但我实际得到的是:

finally
one
two
Run Code Online (Sandbox Code Playgroud)

我如何扭转这种局面,以便在我的承诺链完成之前我的 finally 不会发生?

Dan*_*rin 5

因为你立即打电话console.log('finally')

代替:

.finally(console.log('finally'))
Run Code Online (Sandbox Code Playgroud)

和:

.finally(() => console.log('finally'))
Run Code Online (Sandbox Code Playgroud)

编辑

文档

Promise.prototype.finally以acallback为参数,当promise完成时,无论是fulfilled还是rejected,都会执行指定的回调函数。

  • @DerekChadwell 你必须记住`.finally()` 是一个函数,而不是一个语言结构。因此,您在这些 `()` 之间放置的内容会立即作为参数进行评估。你的原始代码在那里有一个函数调用,所以函数调用被评估为 `.finally()` 函数的参数。Daniel 的正确答案传递了一个箭头函数(匿名函数)而不是作为回调,直到 Promise 引擎确定它应该执行时才会执行。 (2认同)