当前位置: 首页 > 知识库问答 >
问题:

如何在所有javascript ES6promise解决后运行

皇甫福
2023-03-14

我正在替换一些使用jQuery延迟对象的旧代码,并且正在使用Bluebird/ES6承诺进行重写。

如果我有多个异步调用,那么在所有承诺都解决之后,我如何触发一个函数

使用jQuery可以进行延迟:

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语法重写它?

共有2个答案

陆飞鸿
2023-03-14

使用promise.all。注意,它采用一个可迭代的参数,如数组,这与$.when不同,因此不需要.apply

您还希望使用promise.resolve(theJQueryDefered)将jQuery defered转换为本地ES6承诺。编辑:通过调用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!');
});
何松
2023-03-14

由于这是一个标记为蓝鸟的解决方案,除了您已经得到的两个好的解决方案之外,这里还有一个更“蓝鸟”的方法:

var requests = [...];

Promise.map(requests, $.get).then(function(results){
    alert('all promises complete!');
});

这可能是它得到的最简单的。

正如其他人所指出的,本机es6的方法是使用promise.all,不使用promise.resolve或显式创建。最干净的方式,与原生承诺可能是:

var requests = [...];
Promise.all(requests.map($.get)).then(function(results){

});
 类似资料:
  • 当我尝试运行应用程序时,它工作正常。但是当我构建签名apk时,出现了错误 失败:构建失败,出现异常。 问题:任务“:app:lintVitalRelease”的执行失败 无法解析配置“:image_picker_android:调试单元测试运行时类路径”的所有项目。无法转换 bcprov-jdk15on-1.68.jar (org.bouncycastle:bcprov-jdk15on:1.68)

  • 我已经编写了一个简单的map reduce作业来在一些点上执行KMeans聚类。 运行会得到以下输出: 问题出在哪里,有没有应对的建议?

  • 我有很多表,但它们有共同的自动增量。例如,我创建了我的第一个用户,它的id为1,然后我创建了一条消息,它的id为2,然后我创建了一条对消息的注释,它的id为3,但它的id应该为1,因为我没有任何其他注释或消息 我的用户: 我的信息: 我的评论是: 我将感谢任何帮助。

  • 本文向大家介绍解决Pycharm 运行后没有输出的问题,包括了解决Pycharm 运行后没有输出的问题的使用技巧和注意事项,需要的朋友参考一下 在用Pycharm运行项目时,不知道干了什么,导致运行后无法像平时那样显示输出结果: 最后试了很多种方法,终于解决了: 将打勾的地方去掉,不要运行时用Python console。 补充:pycharm运行正确但是不出结果 描述: 之前用的好好的,突然有一

  • 我感觉被Python打败了,以至于我不确定还能尝试什么。我正在运行 Python 3.9,我只是无法在我的生命中让导入正常工作。这是我的目录结构: hello世界主.py 测试hello_world_main.py 当我运行< code > python test _ hello _ world _ main . py 时,我遇到了错误: 我已经完成了 我被打败了,不知道现在该怎么办。为什么会这样

  • 假设我有2个或更多异步调用: 在脚本的后面,我想确保在使用变量之前设置了它们。 此示例代码遵循angularjs中的Firebase示例。 有什么想法吗?