Задать вопрос

Правильно ли я понимаю порядок выполнения NodeJS async?

Допустим есть код :
console.log('start');

async.parallel([
    function () {
        App.loadSettings();
    },
    function () {
        App.loadData();
    },
    function () {
        App.loadData2();
    },
]);

console.log('end');


console.log('end'); - Будет вызван последним всегда? Или не факт? пробовал через sleep делать задержки в паралельных функциях - всегда было именно так.
  • Вопрос задан
  • 1256 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Не правильно понимаете. Если функции loadSettings и другие асинхронные, а они конечно асинхронные по своему смыслу, ведь это внешние запросы из базы или с веника, то писать нужно примерно так:
async.parallel([
    function (callback) {
        App.loadSettings(callback);
    },
    function (callback) {
        App.loadData(callback);
    },
    function(callback) {
        App.loadData2(callback);
    },
]);

И когда они завершаются, они должны уведомлять async вызовом этого самого callback
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Staltec
@Staltec
Node.js разработчик
Ваш код должен выглядеть так:

console.log('start');

async.parallel([
    function (callback) {
        App.loadSettings(callback);
    },
    function (callback) {
        App.loadData(callback);
    },
    function(callback) {
        App.loadData2(callback);
    }
], function(err, results) {
    console.log('end', err ? err : results);
});


Или так:
console.log('start');

async.parallel([
    async.apply(App.loadSettings),
    async.apply(App.loadData),
    async.apply(App.loadData2)
], function(err, results) {
    console.log('end', err ? err : results);
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы