2016-11-07 1 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); 
});