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