JavaScript – 试图了解Ember JS的承诺

前端之家收集整理的这篇文章主要介绍了JavaScript – 试图了解Ember JS的承诺前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试一个代码示例,以达成我的承诺.但是我似乎无法弄清楚如何处理回调并且稍后得到“可调用”值.

这是我正在处理的两个相关的JSBin示例.以详细的风格写成模拟烘烤饼干.

Ember JS没有异步

http://jsbin.com/iSacev/1/edit

纯粹的同步示例来显示基本行为(故意使用基本对象模型)

Ember JS与异步和承诺

http://jsbin.com/udeXoSE/1/edit

尝试扩展第一个示例和实现方法,其中事情完成了一个延迟,并在以后返回一个履行的承诺对象.

试图理解的概念:

>如何正确处理承诺,特别是Ember.RSVP.Promise并在以后获取一个对象.
>如何使用Ember.run.later方法而不是setTimeout

解决方法

How to properly handle promises and specifically Ember.RSVP.Promise and get an object later

似乎像你这样想出来,只需要对你的jsbin做一些微小的改变来使事情发挥作用:

首先,不要将承诺推到你的阵列上,你应该将承诺的价值推到这个回调.真的在这种情况下,你根本不需要这个承诺对象.所以:

// 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中修复bug.在原始版本中,承诺被拒绝,因为有条件测试总是评估为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

How to use the Ember.run.later method instead of setTimeout

他们基本上是一回事.你似乎正确使用它.

原文链接:https://www.f2er.com/js/152133.html

猜你在找的JavaScript相关文章