2017-02-12 3 views
1

Я пытаюсь вызвать функцию обратного вызова после завершения eachSeries, но IT не работает вообще. Он не печатает 2, который должен печатать, когда он вызывается, но он печатает 4 после вызова первой функции. Есть ли какие-нибудь идеи? Спасибо!Как я могу вызвать функцию обратного вызова в функции обратного вызова async.eachSeries

async.waterfall([ 
     function(callback) { 
     console.log("1"); 
     let eroJson = []; 
     rp(optForReddit).then(function(redditJSON) { 
      let posts = redditJSON.data.children; 
      async.eachSeries(posts, function(item, callback) { 
      if (isVideo(item.data.url)) { 
       eroJson.push(getAlbumId(item.data.url)); 
      } 
      callback(); // callback function after eachSeries 
      }, function() { 
      callback(eroJson); // call next callback 
      }); 
     }) 
     }, 
     function(redditJSON, callback) { 
     console.log("2"); 
     callback() // call another function 
     } 
)], 
    function(){ 
     console.log("Last one"); 
    } 

);

+0

должен ли обратный вызов второй функции? –

+0

@JaromandaX Это часть кода. Я просто упростил код, поэтому он не вызывает вызов callback во второй функции. но вторая функция должна запускать 'console.log' в любом случае – boombamboo

+0

ваш getAlbumId является синхронным или асинхронным? –

ответ

0

Изменение имен обратного вызова. кажется, что вы переопределяете обратные вызовы. Имена

async.waterfall([ 
      function(waterfallCallback) { 
      console.log("1"); 
      let eroJson = []; 
      rp(optForReddit).then(function(redditJSON) { 
       let posts = redditJSON.data.children; 
       async.eachSeries(posts, function(item, callback) { 
       if (isVideo(item.data.url)) { 
        eroJson.push(getAlbumId(item.data.url)); 
       } 
       callback(); // callback function after eachSeries 
       }, function() { 
       waterfallCallback(eroJson); // call next callback 
       }); 
      }) 
      }, 
      function(redditJSON, waterfallCallback) { 
      console.log("2"); 
      waterfallCallback(); 
      } 
    )], function(){ 
      console.log("Done executing all waterfall functions"); 
    }); 
+0

http://pastebin.com/cXjAZR3w вот полный код для вас. после того, как я изменил имя всех функций обратного вызова на waterfallCallback, он все еще не работает. '1 4' Я получил то, что получил после запуска кода. – boombamboo

+0

http://pastebin.com/hJSzAnXA это полный код js-файла. – boombamboo

+0

Функция 2 и 3 в вашей водопадной цепи даже не называется. и последний обратный вызов водопада будет вызываться только тогда, когда все функции вызовут обратные вызовы –

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