0

我在浏览器中使用 RSVP.js 库。

我有一个承诺applicationReady

我还有一个承诺loadSomeData

我有最后的承诺,configureUI

每个都依赖于先前的承诺来完成它的工作。我如何让这三个承诺串联运行?我显然错过了一些东西。

谢谢!

解决方案:

好的,这是答案:

不工作:

applicationReady
.then(loadSomeData)
.then(configureUI)

是否有效:

applicationReady
.then(function() { return loadSomeData; })
.then(function() { return configureUI; })

Promise 和返回 Promise 的函数是有区别的。then()不明白这一点的无赖。then(promise) 的用例是什么?

4

2 回答 2

1

我有一个承诺,我有另一个承诺,我有一个最终的承诺。每个都依赖于先前的承诺来完成它的工作。

这是没有意义的。如果你已经有一个承诺,这意味着你已经开始了所有三个过程,你现在掌握着未来的结果。该过程是否依赖于其他承诺(或不依赖于其他承诺)不在您的责任范围内——您只有结果。

我如何让这三个承诺串联运行?

你不能“运行”一个承诺。一个承诺只代表一个结果。但是,您可以运行一个函数。通过说“依赖于先前的工作”,您的意思是将前一个承诺的结果作为参数传递给函数以运行(并创建下一个“依赖”承诺) - 这就是这样.then()做的。

then(promise) 的用例是什么?

空无一人。如果您不传递函数,then则什么也不做。

于 2014-10-15T22:13:18.093 回答
0

好的,这是答案:

不工作:

applicationReady
.then(loadSomeData)  // loadSomeData is a promise
.then(configureUI)   // configureUI is a promise

是否有效:

applicationReady
.then(function() { return loadSomeData; })
.then(function() { return configureUI; })

Promise 和返回 Promise 的函数是有区别的。

于 2014-10-15T21:47:47.797 回答