如何将 Async.js eachSeries 示例转换为 Bluebird Promises?
how to convert Async.js eachSeries example to Bluebird Promises?
我正在研究 Promises 并想知道是否有人熟悉 Async.js 可以演示如何使用 Bluebird promises 执行以下操作。这是我能想到的最简单直接的示例来演示 Async.js eachSeries。
对于不熟悉 Async.js 的任何人,此示例对每个数组元素运行相同的过程,运行 串行(一个接一个而不是并行),然后在所有异步操作完成后执行代码.
var async = require('async');
var items = [0,1,2,3,4,5,6,7,8,9]; // this is to simulate an array of items to process
async.eachSeries(items,
function(item, callback){
console.log('start processing item:',item);
//simulate some async process like a db CRUD or http call...
var randomExecutionTime = Math.random() * 2000;
setTimeout(function(index){
//this code runs when the async process is done
console.log('async Operation Finished. item:',index);
callback(); //call the next item function
},randomExecutionTime,item);
},
function(err){
if(err){
console.log('Got an error')
}else{
console.log('All tasks are done now...');
}
}
);
干杯
半开
我重新格式化并删除了注释,但这与您的 async
代码具有相同的行为。关键是Promise.each
,它是串行工作的。请注意 Promise.each
解析为原始数组。也就是说,如果您在传递给最终 then
的函数中采用参数,它将得到 [0,1,2,3,4,5,6,7,8,9]
.
Promise.delay
本质上是 setTimeout
的简单包装。
var Promise = require('bluebird');
var items = [0,1,2,3,4,5,6,7,8,9];
Promise.each(items, function(item) {
console.log('start processing item:',item);
var randomExecutionTime = Math.random() * 2000;
return Promise.delay(randomExecutionTime)
.then(function() {
console.log('async Operation Finished. item:', item);
});
}).then(function() {
console.log('All tasks are done now...');
}).catch(function() {
console.log('Got an error')
});
我正在研究 Promises 并想知道是否有人熟悉 Async.js 可以演示如何使用 Bluebird promises 执行以下操作。这是我能想到的最简单直接的示例来演示 Async.js eachSeries。 对于不熟悉 Async.js 的任何人,此示例对每个数组元素运行相同的过程,运行 串行(一个接一个而不是并行),然后在所有异步操作完成后执行代码.
var async = require('async');
var items = [0,1,2,3,4,5,6,7,8,9]; // this is to simulate an array of items to process
async.eachSeries(items,
function(item, callback){
console.log('start processing item:',item);
//simulate some async process like a db CRUD or http call...
var randomExecutionTime = Math.random() * 2000;
setTimeout(function(index){
//this code runs when the async process is done
console.log('async Operation Finished. item:',index);
callback(); //call the next item function
},randomExecutionTime,item);
},
function(err){
if(err){
console.log('Got an error')
}else{
console.log('All tasks are done now...');
}
}
);
干杯
半开
我重新格式化并删除了注释,但这与您的 async
代码具有相同的行为。关键是Promise.each
,它是串行工作的。请注意 Promise.each
解析为原始数组。也就是说,如果您在传递给最终 then
的函数中采用参数,它将得到 [0,1,2,3,4,5,6,7,8,9]
.
Promise.delay
本质上是 setTimeout
的简单包装。
var Promise = require('bluebird');
var items = [0,1,2,3,4,5,6,7,8,9];
Promise.each(items, function(item) {
console.log('start processing item:',item);
var randomExecutionTime = Math.random() * 2000;
return Promise.delay(randomExecutionTime)
.then(function() {
console.log('async Operation Finished. item:', item);
});
}).then(function() {
console.log('All tasks are done now...');
}).catch(function() {
console.log('Got an error')
});