1
我正試圖在NodeJS中使用Bluebird或Q將某些回調轉換爲Promise,但是我沒有成功。 任何人都可以很好,給我一個例子如何將上面的代碼轉換爲承諾?NodeJS中的承諾
在此先感謝
阿德里安
function httpResponse(request, response) {
fs.readFile('views/main.ejs', 'utf-8', function readFile(error, file) {
if (error) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write('EJS ERROR');
response.end();
} else {
// get domains data from db needed for main page
dbHandle.queryDB({}, "domains", function dbQueryDB(error, result) {
var ejsData = {name: "Cav"};
if (error) {
response.write('DB ERROR');
response.end();
} else {
ejsData.domains = result;
// get machine type data from db needed for main page
dbHandle.queryDB({}, "type", function dbQueryDB(error, result) {
if (error) {
response.write('DB ERROR');
response.end();
} else {
ejsData.type = result;
//respond index.html
response.writeHead(200, {"Content-Type": "text/html"});
response.end(ejs.render(file, ejsData));
}
});
}
});
}
});
}
感謝您的快速回答。 –
順便說一下,我在「response.end(ejs.render(file,ejsData));」得到了「文件未定義」。我想這是因爲這不是一個閉包,因爲它不能看到文件變量。 –
啊,這就是像這樣的鏈接承諾 - '.then()'變量超出範圍。我會爲你編輯我的答案,以展示如何減少嵌套,但保持範圍。 – clay