2016-11-07 56 views
0

我正在使用npmasync waterfall方法來編寫功能。在那裏我發現了一種奇怪的情況(可能是,我的意識很低)。我的功能如下。我在第一個函數中創建一個事件數組,並通過回調參數將其傳遞給第二個函數。然後我在第二個函數中捕獲該數組並循環它。我想操縱數組的幾個值。之後,我把它發送到最終的功能。NodeJs瀑布回調功能不起作用

最終函數中的console.log語句只是從第一個函數輸出數組的初始狀態,而不是我在第二個函數中完成的操作。任何想法是高度讚賞。

var _async = require('async'); 
var criteria = {}; 

_async.waterfall([ 
    function getSortedCalenderItems(callback){ 
     var events = []; // set of events are included inthis array 
     callback(null, events) 
    }, 

    function getUsers(events, callback) { 
      for (var i = 0; i < events.length; i++) { 
       var event = events[i]; 
       var user = event.shared_user; 

       // manipulate user 
       var newUser = { 
        'id' : '<id>', 
        'name' : 'New name' 
       }; 

       event.shared_user = newUser; 
       events[i-1] = event; 

       if(i === (events.length)) { 
        callback(null, events) 
       } 
      } 

    } 
],function(err, events){ 
     console.log(events); // this shows the initial state of the array. Not the manipulated events array. 
     return; 
}); 
+0

我的意識是*低* – Sikorski

+0

你是不是在你的代碼操縱任何東西,你就創建了一個NEWUSER和完蛋了。可能你忘了將它添加到你的列表中。 – Sikorski

+0

是的。你是對的。我錯過了它。請檢查現在更新的代碼。 –

回答

1

例如;

var _async = require('async'); 
var criteria = {}; 

_async.waterfall([ 
    function (callback) { 
     var events = [// set of events are included inthis array 
      { 
       name: "event1", 
       shared_user : "halil" 
      }, { 
       name: "event1", 
       shared_user : "halil" 
      } 
     ]; 
     callback(null, events); 
    }, 
    function (events, callback) { 
     console.log(events) 
     for (var i = 0; i < events.length; i++) { 
      var event = events[i]; 
      var user = event.shared_user; 

      // manipulate user 
      user = { 
       'id': '<id>', 
       'name': 'New name' 
      }; 

      if (i === (events.length - 1)) { 
       callback({}, events) 
      } 
     } 
    } 
], function (err, events) { 
    console.log(err, events); 
});