使用 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。干杯。
当我做类似的事情时:
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。干杯。