2014-10-13 4 views
0

У меня есть этот бит кода с node.js.node.js Асинхронные функции

Я хочу сделать две параллельные задачи, и мне все равно, в каком порядке они заканчиваются. В итоге оба будут вставлять что-то в базу данных, но сначала я должен выполнить некоторые вычисления и некоторую замену строк.

Нормально ли, что моя тестовая функция всегда заканчивается первым, когда я запускаю этот бит?

Выполняю код 10-20 раз, и тест всегда заканчивается перед test2.

async.parallel([ 
function (callback) { 
    v2 = test(200); 
    callback(null, v2); 
}, 
function (callback) { 
    v3 = test2(300); 
    callback(null, v3); 
} 
], function (err, results) { 
    console.log(results) 
}); 

Здесь моя тестовая функция будет иметь 2-3 вложенных цикла, будет подсчитывать большое количество информации в памяти.

function test(a) { 
    for (var i = 0; i < 1000000; i++) { 
     a = a + 1; 
    } 
    console.log('Finished 1'); 
    return a + 100; 

} 

Эта функция должна закончить первую, потому что есть только один операция в нем ...

function test2(a) { 

    console.log('Finished 2'); 
    return a + 200; 

} 
+0

Как вы тестируете, что он заканчивается первым? Если это просто первый элемент в массиве, это потому, что async сохраняет порядок вывода порядка функций. –

ответ

2

Они фактически не являются асинхронными функциями. Они работают синхронно, поэтому библиотека async не может запускать их одновременно. Он просто запустит их в том порядке, в котором вы их передали.

Думаете, что вы передаете фактические асинхронные функции, асинхронная библиотека начнет первую операцию, вызвав первую переданную вами функцию, но вы выполняете всю свою работу в этой стартовой операции и даже вызываете обратный вызов завершения. Поэтому, прежде чем у него даже будет время для начала второй операции, ваша первая операция уже выполнена.

Помните, что асинхронная библиотека не делает вещи асинхронными, которые не являются действительными асинхронными операциями. Это просто помогает вам управлять и выполнять операции, некоторые из которых могут быть действительными асинхронными операциями.

Смежные вопросы