2017-02-22 75 views
1

這裏是在sql查詢調用中的函數。 只有在完成所有查詢後,我才需要返回回調。 但它返回一個空的數組 如何返回數組與數據畢竟? `回調返回空數組js

function getUserSales(days, callback){ 
    getUserByLastLoginDay(days, function (users) { 
    var userArray = []; 
    _.each(users, function (user) { 
     getMostFavoredCat(user.id, function (cat) { 
     if(!cat || cat.length == 0){ 
     return false; 
     } else { 
      user.mostFavoredCat = takeMostRepeatingObj(cat); 
     } 
     getRelatedSaleByCat(user.id, user.mostFavoredCat.id, function (sales) { 
      user.sales = sales; 
      userArray.push(user) 
     }) 
     }) 
    }) 
    callback(userArray); 
    }) 
} 

`

回答

1

回調函數的第一個參數始終是一個錯誤

callback(null,userArray) 

,您可以利用async.js爲更好地控制流動

npm i async --save

const async = require('async'); 

function getUserSales(days, callback){ 
    getUserByLastLoginDay(days, function (users) { 
    var userArray = []; 
    async.each(users, function (user, cb) { 
     getMostFavoredCat(user.id, function (cat) { 
     if(!cat || cat.length == 0){ 
     return false; 
     } else { 
      user.mostFavoredCat = takeMostRepeatingObj(cat); 
     } 
     getRelatedSaleByCat(user.id, user.mostFavoredCat.id, function (sales) { 
      user.sales = sales; 
      userArray.push(user) 
      cb(); 
     }) 
     }) 
    }, (err) => { 
     if (err) { 
      return callback(err); 
     } else { 
      callback(null, userArray); 
     } 
    }) 
    }) 
} 
+0

謝謝,但我知道。它並沒有幫助 –

+0

'userArray'包含數據,請你可以把'getUserSales'函數調用 –

+0

,所以我把回調(null,userArray)它仍然返回我空數組。 –

0

我認爲它會工作:

function getUserSales(days, callback){ 
getUserByLastLoginDay(days, function (users) { 
    var userArray = []; 
    _.each(users, function (user) { 
     getMostFavoredCat(user.id, function (cat) { 
     if(!cat || cat.length == 0){ 
     return false; 
    } else { 
     user.mostFavoredCat = takeMostRepeatingObj(cat); 
    } 
    getRelatedSaleByCat(user.id, user.mostFavoredCat.id, function (sales) { 
     user.sales = sales; 
     userArray.push(user) 
    }) 
    }) 
callback(userArray); 
}) 
}) 
}