阻断或不阻断,问题是现在:阻塞或不阻塞(Express.js)
在这里被简单路线曝光,一个文件夹服务器存储临时图像。这种方法只是返回图像,就是这样。
app.get('/uploads/fullsize/:file',function (req, res){
var file = req.params.file;
console.log("Crap comign from passport file: " + file)
var img = fs.readFileSync(myPath + "/uploads/fullsize/" + file);
res.writeHead(200, {'Content-Type': 'image/jpg' });
res.end(img, 'binary');
});
我关心的是以下行:
var img = fs.readFileSync(myPath + "/uploads/fullsize/" + file);
这似乎是同步调用。我应该改变为异步?
fs.readFile(req.files.file.path, function (err, imageBinaryData) {
//read code here
});
这是一个有效的问题或我过度反应?我会阻止说如果我有1000个并发用户在做同样的事情吗?
承诺与回调。这个应用程序中散布了很多CB。但最后,我将不得不“升级”承诺申请。 –
您可以在对您最有意义的地方添加承诺。通常情况下,当你看到代码“向右移动”,表示回调地狱,你应该考虑使它承诺基础。此外,Q(如本例中所见)允许您将节点式回调代码转换为基于承诺的代码。另外,Q github页面上的例子展示了如何让你的代码回调和承诺友好,我建议你稍微熟悉一下,以便熟悉一下,然后你会更加意识到什么时候对于“then”ify有意义你的代码。 – binarygiant
这里还有一个想法......诺言通常有助于使异步代码看起来更加同步,因此您的代码将变得更具可读性,并且您还可以解决更棘手的问题,例如需要等待几次异步调用的实例在完成之前完成并发送回复。 Q(以及其他承诺库)可以极大地帮助完成此任务。 – binarygiant