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

标签 javascript promise bluebird es6-promise

我正在替换一些使用 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/29995696/

相关文章:

node.js - 如何使用 sinon 在单元测试中对 Mongoose 模型方法进行 stub

javascript - 在关闭文件流之前如何等待文件流完成写入?

javascript - 使用javascript函数显示一个div

node.js - 多个回调会降低nodejs性能吗?

javascript - 如何使用 jQuery 添加 o'clock 事件附加 html 代码?

promise - 不发送任何新 Action 的 redux-observable 史诗

node.js - 使用 bluebird .return() 方法扩展 bluebird Promise 解析值

javascript - 递归调用异步函数

javascript - Jquery - 清除或删除 URL 参数

javascript - Jquery + Ajax,Params有数据但响应说没有数据