В настоящее время я изучаю node.js, и я вижу 2 примера для программы sync и asycn (тот же).Node.js sync vs. async
Я понимаю концепцию обратного вызова, но я пытаюсь понять преимущество второго (асинхронного) примера, так как кажется, что они оба делают то же самое, даже если это различие .. .
Не могли бы вы объяснить причину, почему второй пример будет лучше? Я буду рад получить более широкое объяснение, которое поможет мне понять концепцию.
спасибо!
первый пример:
var fs = require('fs');
function calculateByteSize() {
var totalBytes = 0,
i,
filenames,
stats;
filenames = fs.readdirSync(".");
for (i = 0; i < filenames.length; i ++) {
stats = fs.statSync("./" + filenames[i]);
totalBytes += stats.size;
}
console.log(totalBytes);
}
calculateByteSize();
второй пример:
var fs = require('fs');
var count = 0,
totalBytes = 0;
function calculateByteSize() {
fs.readdir(".", function (err, filenames) {
var i;
count = filenames.length;
for (i = 0; i < filenames.length; i++) {
fs.stat("./" + filenames[i], function (err, stats) {
totalBytes += stats.size;
count--;
if (count === 0) {
console.log(totalBytes);
}
});
}
});
}
calculateByteSize();
Спасибо! удивительный ответ. так что, другими словами, во втором примере мы можем получить stat для третьего файла до получения первого файла, верно? – FED
Где можно узнать больше о том, что происходит за кулисами? Как объяснялось в вашем ответе. –
Работа с привязкой к вводу/выводу не требует процессора, поэтому блокировка потока, ожидающего завершения, неэффективна. Javascript использует события/обратные вызовы, когда данные готовы, позволяя текущему потоку использовать ресурсы ЦП. https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ – Patrick