私はnode asynclib- https://github.com/caolan/async#forEach を使用しています。オブジェクトを反復処理し、そのインデックスキーを出力します。完了したら、コールバックを実行します。
ここに私がこれまで持っているものがありますが、'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が提供する非常に便利で強力な機能です。3つのフィールドがあります。コールバックはオプションです。コールバックを提供している場合は、フロントエンドで表示したい応答または結果を返します
関数iterateeをcoll内の各アイテムに並行して適用します。反復子は、リストのアイテムと、終了したときのコールバックで呼び出されます。繰り返し対象がコールバックにエラーを渡すと、(各関数の)メインコールバックがすぐにエラーとともに呼び出されます。
この関数は各アイテムにiterateeを並列に適用するため、iteratee関数が順番に完了する保証はありません。
例
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);
}
});
}
});