我正在上傳多個文件並保存在某個目錄中。我的代碼如下如何避免node.js的異步行爲?
app.post('/file_upload', function (req, res) {
var msgs = '';
req.files.forEach(function(element) {
var fileNameToWrite = __dirname + "\\uploads\\" + element.originalname;
fs.readFile(element.path, function (err, data) {
fs.writeFile(fileNameToWrite, data, function (err) {
if(err){
msgs += element.originalname + " Uploaded Failed Error: '"+ err +"' ";
}
else{
msgs += element.originalname + " Uploaded Successfully ";
}
});
});
},this);
console.log("Final Msgs: " + msgs);
res.end(JSON.stringify(msgs));
});
問題是封郵件被異步填充,我想封郵件一次的forEach完成。我怎樣才能做到這一點?
您在這裏問的是錯誤的問題,您不想擺脫異步行爲,因爲這會導致用戶體驗失效。相反,一旦所有請求都完成,您應該找到一種方法來執行您的代碼。不幸的是,我不太瞭解節點,告訴你如何做到這一點。 –
@RoryMcCrossan @RoryMcCrossan對這個問題感到抱歉這裏我沒有讀到你的答案在ajax上不要使用ASYNC FALSE你能告訴爲什麼謝謝你 – guradio
這是因爲運行請求同步鎖定瀏覽器的UI。這意味着對用戶來說,瀏覽器將顯示爲鎖定狀態,並且已經崩潰,直到所有請求都完成。 –