使用 Ember.RSVP.all 和 Ember.RSVP.Promise 链接承诺返回奇怪的结果

Chaining promises with Ember.RSVP.all and Ember.RSVP.Promise returning odd results

当我做类似的事情时:

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() 的响应中,喜欢:

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

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

我尝试在 JSBin 上设置相同的示例,使用 Ember.run.later 作为承诺:JSBin Example。该方法在这里似乎很管用。

我是不是漏掉了什么?

事实证明 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。干杯。