阻斷或不阻斷,問題是現在:阻塞或不阻塞(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