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

10-12 00:51