我正在上传多个文件并保存在某个目录中。我的代码如下如何避免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。这意味着对用户来说,浏览器将显示为锁定状态,并且已经崩溃,直到所有请求都完成。 –