有没有可能以某种方式用Promises运行同步循环
Is it possible somehow run sync loop with Promises?
所以我有一个简单的循环,函数返回Promise
。看起来是这样的:
for (var i = 0; i < categories.length; i++) {
parseCategory(categories[i]).then(function() {
// now go to the next category
})
}
是否可以以某种方式等待第一个函数结束并迭代到下一个元素?
p.S。没有必要使用承诺。
如果您想在没有库的ES6中执行此操作:
var parseCategoryPromise = Promise.resolve();
for (var i = 0; i < categories.length; i++) {
(function(i){
parseCategoryPromise = parseCategoryPromise.then(function(){
return parseCategory(categories[i])
});
})(i)
}
如果您已经在使用Promises,为什么不一直使用呢?最好的Promise模块Bluebird有一个助手函数,专门设计用于在数组中串行迭代,Promise控制执行:http://bluebirdjs.com/docs/api/promise.mapseries.html.你这样使用它:
Promise.mapSeries(categories, function(category) {
// Parse the category, and return a value or a promise.
});
如果parseCategory是在其他地方定义的函数,您甚至可以得到更简短的:
Promise.mapSeries(categories, parseCategory);
还有一个并行执行调用的map
姐妹函数。
有了等待/异步支持,您就可以很容易地做到这一点:
async function parseCategories (categories) {
for (var i = 0; i < categories.length; i++) {
await parseCategory(categories[i])
}
}
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 可以简化嵌套的延迟Q Promises解析吗
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 有没有可能以某种方式用Promises运行同步循环
- 如何在解决所有javascript ES6 Promises后运行
- 如何运行Firebase和Anguarjs Promises,如$loaded(),然后从依赖函数中获取值
- 由JS Promises排序的AJAX调用似乎按照正确的顺序运行,但数据库的输出却表明并非如此