Как вы, наверное, знаете, в node.js. все работает асинхронноПоэтому, когда вам нужно, чтобы все работало в определенном порядке, вам нужно использовать управляющую библиотеку или реализовать ее самостоятельно.
Я настоятельно рекомендую вам взглянуть на async ,поскольку это легко позволит вам сделать что-то вроде этого:
var async = require('async');
// ..
if(result.tasks) {
async.forEach(result.tasks, processEachTask, afterAllTasks);
function processEachTask(task, callback) {
console.log(task);
common.findOne('tasks', {'taskId':parseInt(task)}, function(err,res) {
tArr.push(res); // NOTE: Assuming order does not matter here
console.log(res);
callback(err);
});
}
function afterAllTasks(err) {
console.log(tArr);
}
}
Главное, что нужно увидеть здесь, это то, что processEachTask вызывается с каждой задачей параллельно, поэтому порядок не гарантируется.Чтобы отметить, что задача была обработана, вы будете вызывать callback
в анонимной функции с findOne
.Это позволяет вам выполнять больше асинхронной работы в processEachTask
, но все же удается определить, когда это будет сделано.Когда каждая задача будет выполнена, она вызовет afterAllTasks
.
Взгляните на async , чтобы увидеть все вспомогательные функции, которые она предоставляет, это очень полезно!