如何正确处理承诺,特别是 Ember.RSVP.Promise 并稍后获取对象
似乎你已经接近解决这个问题了,只需要对你的 jsbin 做一些小改动就可以了:
首先,与其将Promise推送到您的数组中,不如将 Promise 传递给then
回调的值推送。真的在这种情况下,你根本不需要那个 promise 对象。所以:
// Call the then function on the promise
App.cookieSlowBake(cookie).then(function(value) {
alert("Your slow baked cookies are ready to eat");
App.CookieStore.pushObject(value);
}, function(value) {
// failure
alert("Something happened with the oven sorry no cookies.");
});
第二个更改是修复 cookieSlowBake 中的错误。在原始版本中,promise 被拒绝,因为条件测试总是评估为 false,因为它不在 Ember.run.later 回调中。新版本摆脱了条件,只是在回调完成时解决了承诺。
var bakedCookiePromise = new Ember.RSVP.Promise(function(resolve, reject){
var bakeTime = 2000; // milliseconds
var bakedCookie = false;
Ember.run.later(cookieDough, function() {
// code here will execute within a RunLoop in about the bakeTime with this == cookieDough
cookieDough.set('deliveryStatus', "cookie delivered later after baking " + bakeTime);
bakedCookie = true;
resolve(cookieDough);
}, bakeTime);
});
在这里查看工作 jsbin:http: //jsbin.com/ebOBEk/1/edit
如何使用 Ember.run.later 方法而不是 setTimeout
它们基本上是一样的。你似乎正确地使用它。