我正在替换一些使用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语法重写此内容?
最佳答案
由于这是标记为bluebird,除了两个好的解决方案外,您在这里已经获得了一种更“蓝鸟”的方式:
var requests = [...];
Promise.map(requests, $.get).then(function(results){
alert('all promises complete!');
});
这可能就这么简单。
正如其他人指出的那样,本机es6方式将是使用
Promise.all
,不需要Promise.resolve
或显式创建。带有原生 promise 的最干净的方法可能是:var requests = [...];
Promise.all(requests.map($.get)).then(function(results){
});
关于javascript - 解决所有JavaScript ES6 promise 后如何运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29995696/