Я пытаюсь понять, как используются асинхронные функции.Вложенные асинхронные функции, рекомендации
Как assigement я должен включить следующую функцию:
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');
function calculateByteSize(){
var totalBytes = 0,
i,
stats;
fs.readdir(".", function(err, data){
for (i = 0; i < data.length; i++){
fs.stat("./" + data[i],function(err, stats){
totalBytes += stats.size;
});
}
});
console.log(totalBytes);
}
calculateByteSize();
Какого works-- если я печатаю значение «TotalBytes» во время начала цикла, я получаю правильные значения.
Однако оператор console.log печатает значение «0», так как кажется, что оно выполняется до цикла.
Все работает нормально, если я использую statSync, как в исходной функции.
Мой вопрос: предоставляется выбор между синхронной и асинхронной версией функции, которая лучше всего использовать при вставке в асинхронную функцию?
Есть ли способ, чтобы убедиться, что мой оператор печати выполнен после того, как генерируется правильное значение, без использования обещания? (как в: Issue with nested asynchronous function not returning data in time)
вы читали (HTTP [Как вернуть ответ от асинхронного вызова?]: //stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) – Jasen