2015-11-30 3 views
0

Сделать последнюю консоль.log той, у кого есть ---- печать после того, как все файлы были прочитаны.Печать после того, как файл прочитал обратный вызов

fs.readdir(inputFolder, function(err, list) { 
    list.forEach(function(file){ 
     console.log('# ' + file + ' --> ' + folder); 
    });  
}); 

console.log('--------------------------------------------------------'); 
+1

Поместите эту строку после 'list.forEach' не после того, как' fs.readdir' – Rayon

+0

я, хотя для каждого был обратный вызов; ( – aWebDeveloper

+0

пост это как ответ – aWebDeveloper

ответ

0

forEach делает синхронную работу и fs.readdir является асинхронным, следовательно, console.log('--------------------------------------------------------'); будет выполняться сразу после fs.readdir.

Чтобы распечатать его после всех итераций list, положить заявление после того, как журнал list.forEach не после fs.readdir

+0

что do u означает «в этом случае» – aWebDeveloper

+0

В [async] (https://github.com/caolan/async), он делает что-то другое! – Rayon

+0

, что означает, что поведение по умолчанию это синхронизация – aWebDeveloper

0
fs.readdir(inputFolder, function(err, list) { 
    list.forEach(function(file){ 
     console.log('# ' + file + ' --> ' + folder); 
    }); 
    console.log('--------------------------------------------------------  '); 
}); 

fs.readdir является асинхронным. Это означает, что код после этого вызова будет продолжать работать, даже если readdir не завершен.
Вы можете использовать readdirSync, чтобы запустить его синхронно, но это был бы плохой выбор, если есть еще одно решение. Вы всегда хотите асинхронно в js, потому что это то, что делает js быстрым, потому что ничто не блокирует выполнение кода.
Ввод строки в обратный вызов readdir после того, как будет напечатан каждый файл, решит вашу проблему.

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