2017-02-22 35 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

, поэтому я поставил callback (null, userArray), он все равно возвращает мне пустой массив. –

0

Я думаю, что это будет Works:

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); 
}) 
}) 
}