2017-02-22 73 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); 
}) 
}) 
}