链接承诺与Ember.RSVP.all和Ember.RSVP.Promise返回奇数结果

时间:2015-07-25 01:19:13

标签: javascript ember.js promise chaining rsvp.js

当我做类似的事情时:

Ember.$.getJSON(url)
  .then(function(response){
    return Ember.RSVP.all(response.map(Ember.$.getJSON))
  })
  .then(function(response){
    // this is where the oddity begins
    console.log(response)
  })

在我本地环境(Ember 1.13.5)的应用程序路由器的model挂钩中,我在第二个then()的响应中得到了一个奇怪的响应,如:< / p>

Promise: {
  _id: 48
  _label: undefined
  _result: Array[1]
  _state: 1
  _subscribers: Array[0]
  __proto__: Promise
}

我可以在第二个response.then()中执行then以获得我正在寻找的响应,但这不太理想,因为我想链接承诺。

我尝试在JSBin上设置相同的示例,使用Ember.run.later充当承诺:JSBin Example。这种方法似乎在这里工作正常。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

事实证明Ember.$.ajax()Ember.$.getJSON()是罪魁祸首。它们导致承诺链失败。将getJSON替换为:

new Ember.RSVP.Promise(function(resolve, reject){
  Ember.run.later(function(){
    console.log('resolving first fake promise');
    var response = [{id: 1, pool: 1, collection: 1}, {id: 2, pool: 2, collection: 1}];
    resolve(response)
  },1000)
})

有效。所以我转到ember-cli-ic-ajax,并使用它来处理getJSON部分,它工作正常。

干杯,jQuery。欢呼声。