我正在替换一些使用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语法重写它?
使用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!');
});
由于这是一个标记为蓝鸟的解决方案,除了您已经得到的两个好的解决方案之外,这里还有一个更“蓝鸟”的方法:
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示例。 有什么想法吗?