Node.js – 使用async lib – async.foreach和object
我正在使用节点asynchronous库 – https://github.com/caolan/async#forEach,并想遍历一个对象,并打印出其索引键。 一旦完成,我想要执行callback。
这是我迄今为止'iterating done'
但'iterating done'
从未被看到:
async.forEach(Object.keys(dataObj), function (err, callback){ console.log('*****'); }, function() { console.log('iterating done'); });
-
为什么最后的函数不被调用?
-
如何打印对象索引键?
最后的函数不会被调用,因为async.forEach
要求您为每个元素调用callback
函数。
使用这样的东西:
async.forEach(Object.keys(dataObj), function (item, callback){ console.log(item); // print the key // tell async that that particular element of the iterator is done callback(); }, function(err) { console.log('iterating done'); });
async.each是Async Lib提供的非常有用和function强大的函数,它有3个字段1-集合/数组2-迭代3-callback集合被引用到数组或对象集合,迭代是指每次迭代callback是可选的。 如果我们给callback,那么它会返回你要在前台显示给你的回应或结果
并行地将函数iteratee应用于coll中的每个项目。 迭代器用列表中的项目调用,并在完成时调用callback函数。 如果迭代器将错误传递给其callback函数,则主callback函数(针对每个函数)将立即调用该错误。
请注意,由于此函数并行地将迭代应用于每个项目,因此不能保证迭代函数将按顺序完成。
exapmle-
var updateEventCredit = function ( userId, amount ,callback) { async.each(userId, function(id, next) { var incentiveData = new domain.incentive({ user_id:userId, userName: id.userName, amount: id.totalJeeneePrice, description: id.description, schemeType:id.schemeType }); incentiveData.save(function (err, result) { if (err) { next(err); } else { domain.Events.findOneAndUpdate({ user_id: id.ids }, { $inc: { eventsCredit: id.totalJeeneePrice } },{new:true}, function (err, result) { if (err) { Logger.info("Update status", err) next(err); } else { Logger.info("Update status", result) sendContributionNotification(id.ids,id.totalJeeneePrice); next(null,null); } }); } });