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个参数(变量?)