我该如何兑现承诺呢



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

我有一个承诺applicationReady

我有另一个承诺loadSomeData

我有最后的承诺,configureUI

每个人都依赖于之前的承诺来完成自己的工作。我如何让这三个承诺在系列中运行?我显然错过了什么。

谢谢!

解决方案:

好的,答案是:

不起作用:

applicationReady
.then(loadSomeData)
.then(configureUI)

有效:

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

promise和返回promise的函数是有区别的。令人沮丧的是,then()自己并没有弄清楚这一点。那么(承诺)有什么用呢?

我有一个承诺,我有另一个承诺。我有最后的承诺。每个人都依赖于之前的承诺来完成自己的工作。

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

我如何让这三个承诺在系列中运行?

你不能"履行"承诺。承诺只代表结果。但是,可以运行函数。说"依赖于前一项工作",意味着前一个promise的结果被传递到函数中,作为参数运行(并创建下一个"依赖"promise)——这正是.then()所做的。

那么(承诺)有什么用呢?

没有。如果不传递函数,then将不执行任何操作。

好的,答案是:

不起作用:

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

有效:

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

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

最新更新