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/26634654/

相关文章:

javascript - 是否可以使用 ES6 类作为 Typescript 类型?

javascript - 从 http 内部函数返回数据

javascript - 返回 promise 链中引用的数据

node.js - 如何使用 Bluebird 处理 Mongoose 返回的 promise ?

javascript - 尝试并捕获 promise

javascript - 在 ES6 + babel 中使用 bluebird promise 导入类(构造函数)

javascript - 通过 jQuery 或 Js 禁用打印屏幕

javascript - 在 jquery fadeIn 上,我怎样才能使它们保持在同一条线上?

javascript - 使用普通 JS Promise 编写 jQuery AJAX 请求

javascript - 有没有办法将附件添加到用 JavaScript 或其他免费 API 创建的 eml 文件?