У меня есть файл, в котором я пишу вещи:nodejs: Как ждать несколько асинхронных задач, чтобы закончить
var stream = fs.createWriteStream("my_file.txt");
stream.once('open', function(fd) {
names.forEach(function(name){
doSomething(name);
});
stream.end();
});
Это работает нормально, и я могу записать в файл. Проблема заключается в том, что функция doSomething() имеет некоторые части, которые являются асинхронными. Примером может служить функция dnsLookup. Где-то в моем DoSomething() У меня есть:
dns.lookup(domain, (err, addresses, family) => {
if(err){
stream.write("Error:", err);
}else{
stream.write(addresses);
}
});
Теперь моя проблема, так как проверка DNS является асинхронной, то код продолжает выполнение закрытия потока. Когда ответ DNS наконец приходит, он не может писать нигде. Я уже пытался использовать асинхронный модуль, но он не работал. Вероятно, я сделал что-то не так.
Любая идея?
Обещания существуют для решения проблемы, с которой вы сталкиваетесь. Я бы посмотрел на что-то вроде https://github.com/kriszyp/promised-io – inkdeep
. Замечание: я довольно уверен, что вы имели в виду 'if (err)', а не 'if (! Err)' выше, поскольку блок, подключенный к нему, предназначен для обработки ошибки. –