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