2017-02-12 129 views
1

我試圖在將數據從reddit api推送到數組之後執行某些操作,但回調函數根本不起作用。當你看到代碼時,它應該打印Callback function works!但它沒有。對此有任何想法嗎?async.each不運行回調函數

let optForReddit = { 
    method: 'GET', 
    uri: 'https://www.reddit.com/domain/eroshare.com/new.json', 
    json: true 
} 

    rp(optForReddit) 
    .then(function(redditJSON) { 
     let posts = redditJSON.data.children; 
     let len = posts.length; 
     let eroJson = []; 
     async.each(posts, function(item, callback) { 
      if (isVideo(item.data.url)) { 
      eroJson.push(getAlbumId(item.data.url)); 
      } 
     },  
     function(err) { 
      console.log("Callback function works"); 
      if(err) console.log(err); 
     }); 
    }) 
    .catch(function(err) { 
     console.log(err); 
    }) 

回答

0
async.each(posts, function(item, callback) { 
     if (isVideo(item.data.url)) { 
     eroJson.push(getAlbumId(item.data.url)); 
     } 
     callback(); // this callback is for informing that i am done processing one item in array. 
    },  
    function(err) { 
     //this function will be invoked when the callback() in the above body was called maximum time(e.g posts.length times) 
     console.log("Callback function works"); 
     if(err) console.log(err); 
    }); 

,這是因爲你沒有調用回調函數每次。被調用時的回調函數告訴異步函數我完成了當前的執行並調用下一次迭代。你永遠不會調用回調函數()。

+0

但我想在每個循環完成後調用回調函數。我能怎麼做? – boombamboo

+0

就像你想連續執行循環?所以它按順序執行? –

+0

是的!因此回調函數可以在所有事情完成後運行。 – boombamboo