gpt4 book ai didi

jquery - 以编程方式创建 jQuery Promise 的链式序列

转载 作者:行者123 更新时间:2023-12-01 02:56:37 24 4
gpt4 key购买 nike

我有一个函数可以通过对列表中的每个文件调用单个deleteFile(filePath) 来删除文件数组filePaths(我使用的一些APIS 不支持批量删除)。函数deleteFile返回一个jQuery promise 并在删除文件时解析/拒绝。

function deleteFiles(filePaths)
var deferreds = $.map(fileKeys, function (val, index) {
return deleteFile(filePath);
});

$.when.apply($, deferreds).then(function (schemas) {
console.log("DONE", this, schemas);
deferred.resolve();
}, function (error) {
console.log("My ajax failed");
deferred.reject(error);
});

我收到对列表中某些文件的 .reject 调用(并且我知道它们存在),所以我想我可能需要将 filePaths 数组转换为调用链,例如队列(b/c 这不是 $.when 所做的,是吗?它似乎一次性启动它们)。我知道如何做到这一点(例如 .deleteFile(path1).deletePath(path2). 等,当它们位于这样的数组中时。

提前感谢任何帮助。

最佳答案

$.when 没有启动任何东西,它们是在您的 map 循环中启动的。 $.when 只是返回一个 promise 数组的 promise 。

如果您希望它们按顺序排列,请使用reduce:

function deleteFiles(filePaths) {
return filePaths.reduce(function(cur, next) {
return cur.then(function() {
return deleteFile(next);
});
}, $().promise());
}

如果您希望它们按顺序排列,同时还返回带有各自结果的数组:

function deleteFiles(filePaths) {
var ret = filePaths.slice(0);
return filePaths.reduce(function(cur, next, i) {
return cur.then(function() {
return ret[i] = deleteFile(next);
});
}, $().promise()).then(function(){
return $.when.apply($, ret);
})
//These don't make any sense to call in this function but sure
.then(function(schemas) {
console.log("DONE", this, schemas);
}).fail(function(error) {
console.log("My ajax failed");
});
}

关于jquery - 以编程方式创建 jQuery Promise 的链式序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013869/

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