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'); }); 
  1. 为什么最后的函数不被调用?

  2. 如何打印对象索引键?

最后的函数不会被调用,因为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); } }); } });