2014-12-24 2 views
2

Это, очевидно, чрезвычайно упрощенный фрагмент кода, но моя база кода поддерживается с тем, что этот пример настроен на подражание.Async.waterfall внутри цикла for не соответствует правильному порядку

Когда я пытаюсь зарегистрировать текущий индекс for-loop из функции async.waterfall, я получаю 2. 2 - количество общих элементов в моем массиве, но, конечно, индексы должны быть 0 и 1. I Я эффективно использовал async.MAP в for-loop в прошлом, поэтому я не уверен, почему эта функция async не работает. Спасибо за любую помощь в этом вопросе или за тему вложенных функций асинхронной библиотеки.

var objects = [ 
    {objectName: "hello", 
     objectPurposes: ["demo"]}, 
    {objectName: "goodbye", 
     objectPurposes: ["demo", "fun"]}]; 

for (var i=0; i<objects.length; i++){ 
    async.waterfall([ 
     function(callback){ 
      console.log(i); 
     } 
    ]) 
} 
+0

[async-waterfall] (https://github.com/caolan/async#waterfalltasks-callback) принимает массив как первый параметр, который будет вашим массивом объектов, чтобы перебирать его по длине массива. – Ravi

+0

Первым параметром async-waterfall является массив задач, не так ли? – jaja

+0

Я думаю, что Рави имел в виду 'async.forEach'. – icktoofay

ответ

1

Ну, значение я бы изменилось к тому времени async.waterfall завершает свой processing.If вы хотите сохранить значение I, вы можете обернуть его вокруг IIFE.

var objects = [{ 
    objectName: "hello", 
    objectPurposes: ["demo"] 
}, { 
    objectName: "goodbye", 
    objectPurposes: ["demo", "fun"] 
}]; 

for (var i = 0; i < objects.length; i++) { 
    (function(i) { 
     async.waterfall([ 
      function(callback) { 
       console.log(i); 
      } 
     ]) 
    })(i); 
}; 

Я бы предпочел использовать obj.shift() и завернуть async.waterfull под рекурсивной функции для такой цели, хотя. http://book.mixu.net/node/ch7.html Пройдите это, его действительно полезно.

Смежные вопросы