Javascript $.when-done在解决所有承诺之前被调用
下面是我同时获取一些主干集合的代码:Javascript $.when-done在解决所有承诺之前被调用,javascript,jquery,backbone.js,promise,jquery-deferred,Javascript,Jquery,Backbone.js,Promise,Jquery Deferred,下面是我同时获取一些主干集合的代码: $.when.apply(this, _.map(collection_params_pairs, function(pair) { pair.collection.fetch({ data: pair.params, success: function(collection, response) { console.log('success'); } }
$.when.apply(this, _.map(collection_params_pairs, function(pair) {
pair.collection.fetch({
data: pair.params,
success: function(collection, response) {
console.log('success');
}
});
})).done(function() {
console.log('done');
});
当我运行它时,done
在success
之前被记录到控制台。我做错了什么?\uz.map()
在您的代码中调用会返回一个未定义的数组,因此$.when()
不需要等待任何承诺
因此它会立即解决。.map()
在代码中调用会返回一个未定义的数组,因此$.when()
不需要等待任何承诺
因此,它会立即解决。$。when()
需要一组承诺,以便它可以监视这些承诺,并在所有承诺完成时触发您的.done()
处理程序。通过将.map()
的返回结果发送到$来构造代码的方式。当()
时,需要从.map()
回调函数返回承诺
所以。。。假设pair.collection.fetch()
已经返回了一个承诺(看起来它返回了一个jqXHR对象,这是一个承诺),您可以执行以下操作:
$.when.apply($, _.map(collection_params_pairs, function(pair) {
return pair.collection.fetch({
data: pair.params,
success: function(collection, response) {
console.log('success');
}
});
})).done(function() {
console.log('done');
});
如果pair.collection.fetch()
未返回承诺,则需要创建一个承诺才能使用$。when()
:
仅供参考,您可能还应该处理对.collection.fetch()
调用中的错误,因为我假设它具有某种类型的错误路径。$。when()
需要一组承诺,以便它可以监视这些承诺,并在所有承诺完成后触发您的.done()
处理程序。通过将.map()
的返回结果发送到$来构造代码的方式。当()
时,需要从.map()
回调函数返回承诺
所以。。。假设pair.collection.fetch()
已经返回了一个承诺(看起来它返回了一个jqXHR对象,这是一个承诺),您可以执行以下操作:
$.when.apply($, _.map(collection_params_pairs, function(pair) {
return pair.collection.fetch({
data: pair.params,
success: function(collection, response) {
console.log('success');
}
});
})).done(function() {
console.log('done');
});
如果pair.collection.fetch()
未返回承诺,则需要创建一个承诺才能使用$。when()
:
仅供参考,您可能还应该处理对.collection.fetch()
调用中的错误,因为我假设它具有某种类型的错误路径。您的\uuuuwMap
返回什么?我看到它返回了一个未定义的数组,因此在时没有什么可等待的。啊,周五晚上很难集中注意力。谢谢似乎没有人告诉你你需要改变什么。在.map()
回调中,您需要返回一个承诺,$.when()
可以对其进行操作。现在,您没有将任何承诺传递给$.when()
,因此它没有什么可等待的。您的\uu.map
返回了什么?我看到它返回了一个未定义的数组,因此在时没有什么可等待的。啊,周五晚上很难集中注意力。谢谢似乎没有人告诉你你需要改变什么。在.map()
回调中,您需要返回一个承诺,$.when()
可以对其进行操作。现在,您没有向$传递任何承诺。when()
因此它没有什么可等待的。主干的集合.fetch
返回一个jqXHR对象,它是一个承诺-因此第二组逻辑(创建一个延迟逻辑)实际上并不需要。只需一个小提示:“需要一个承诺数组”-它需要N个参数(变量?)主干网的collection.fetch
返回一个jqXHR对象,它是一个承诺-因此第二组逻辑(创建一个延迟的)并不是真正需要的。只是一个小提示:“需要一个承诺数组”-它需要N个参数(变量?)