У меня есть следующий массив:Обратный звонок уже называется модуль асинхронной
var files = [
{
name: 'myfile.txt'
},
{
name: 'myfile2.txt'
}
];
Я использую асинхр для доступа к этим объекты и отправить их на добычу, как это: функция
экстракции:
var extraction = function(file, callback) {
// extract
// return text
callback(text);
};
Использование асинхронной
var fn = function(files, callback) {
Async.mapLimit(files, 3000, function(file, done) {
extraction(file, function(texts) {
done(texts);
});
}
}, function(texts) {
callback(texts);
}
Как мне нужно позвонить:
fn(files, function(texts) {
console.log(texts); // new objects, now with text's
});
Подобно этому, я получаю следующее сообщение об ошибке:
Done was already called.
Это происходит потому, что я не могу назвать сделать внутри асинхронных два способов, и я Я это делаю.
Чтобы обойти эту проблему, я делаю это внутри Async:
if (files.length === texts.length) {
done(texts);
}
Так будет сравнивать. Размер файлов такой же, как размер текста? Да? Таким образом, вы можете сделать это.
Это будет работать отлично. Проблема в том, что я не могу передать аргумент ошибки внутри другое заявление, например:
if (files.length === texts.length) {
done(null, texts);
} else {
done('ERROR'!);
}
Во-первых, потому что было бы заехать в каждом цикле, так что вызовет ту же ошибку:
Done was already called.
И даже если бы я мог, сломал бы цикл, потому что он будет вызываться в первом цикле.
Как я могу это исправить? Мне нужен свет здесь:/
@ JoãoCalvin - Я сделал еще несколько исправлений. Выполненный обратный вызов должен передать значение ошибки в качестве первого аргумента («null», если нет ошибки). И, последний обратный вызов вызывается с данными в качестве второго аргумента, первым является аргумент кода ошибки. Кроме того, является 'extract()' асинхронным? – jfriend00
Да, извлечение является асинхронным .. Я собираюсь попробовать ваш код. –
спасибо !! @ jfriend00 –