gpt4 book ai didi

javascript - 如何在解决所有 javascript ES6 Promises 后运行

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:49 25 4
gpt4 key购买 nike

我正在替换一些使用 jQuery Deferred 对象的旧代码,我正在使用 Bluebird/ES6 Promises 重写。

如果我有多个异步调用,我如何在所有 promise 都已解决后触发一个函数。

使用 jQuery Deferreds 它会是这样的:

var requests = [...]; //some arbitrary data that is iterated to generate multiple ajax requests
var promises = [];
resuests.forEach(function(endpoint) {
promises.push($.ajax({url: endpoint}));
});

$.when.apply($, promises).then(function() {
alert('all promises complete!');
});

如何使用 ES6 Promise 语法重写它?

最佳答案

使用 Promise.all .请注意,与 $.when 不同,它采用一个可迭代对象 作为其参数,因此不需要 .apply

您还需要使用 Promise.resolve(thejQueryDeferred) 将 jQuery Deferred 转换为原生 ES6 Promise。 . 编辑:这是通过调用 Promise.all 隐式完成的,因此实际上是可选的。

完整代码:

var requests = [...]; //some arbitrary data that is iterated to generate multiple ajax requests
var promises = [];
requests.forEach(function(endpoint) {
var nativePromise = Promise.resolve($.ajax({url: endpoint})); // if you want to make it clear that you're converting from jQuery Deferred to ES6 promise!
promises.push(nativePromise);
});

Promise.all(promises).then(function() {
alert('all promises complete!');
});

关于javascript - 如何在解决所有 javascript ES6 Promises 后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634654/

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