gpt4 book ai didi

javascript - $.when - done 在所有 promises 被解决之前被调用

转载 作者:行者123 更新时间:2023-11-30 07:38:09 26 4
gpt4 key购买 nike

这是我同时获取一些 Backbone 集合的代码:

$.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');
});

当我运行它时,donesuccess 之前被记录到控制台。我做错了什么?

最佳答案

$.when() 需要一组 promise ,以便它可以监视这些 promise 并在所有这些 promise 完成时触发您的 .done() 处理程序。您的代码结构方式是将 _.map() 的返回结果发送到 $.when(),您需要从 返回一个 promise .map() 回调函数。

所以...假设 pair.collection.fetch() 已经返回了一个 promise(看起来它返回了一个 jqXHR 对象,这是一个 promise),你可以这样做:

$.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() 没有返回一个 promise,那么您需要创建一个以使用 $.when():

$.when.apply($, _.map(collection_params_pairs, function(pair) {
var def = $.Deferred();
pair.collection.fetch({
data: pair.params,
success: function(collection, response) {
def.resolve(response);
console.log('success');
}
});
return def.promise();
})).done(function() {
console.log('done');
});

仅供引用,您可能还应该处理 pair.collection.fetch() 调用的错误,因为我认为它有某种类型的错误路径。

关于javascript - $.when - done 在所有 promises 被解决之前被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25819072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com