【发布时间】:2018-01-21 18:45:09
【问题描述】:
所以我是 Node 新手,我一直在尝试使用 Promise 做一些工作。我的问题是我似乎无法让我的端点“异步”执行它的代码。这个想法是我的端点执行“列表”函数,该函数应该将单词注销到控制台并将“真”返回给响应。我的承诺只是等待五秒钟,然后打印出“承诺”。我期待控制台打印“之前”“之后”“承诺”(按此顺序),但我得到“之前”“承诺”“之后”,这在我看来是同步执行。列表函数不应该移动到代码的最后一行('After')而不是等待 promise 解决/拒绝吗?
var log4js = require('log4js');
var logger = log4js.getLogger('controller');
var Promise = require('promise');
function pause(milliseconds) {
var dt = new Date();
while ((new Date()) - dt <= milliseconds) { /* Do nothing */ }
}
var listPromise = function(){
return new Promise(function (resolve, reject){
var flag = true;
try{
pause(5000);
console.log('Promise');
}catch(err){
logger.error('Error');
}
if(flag){
resolve(flag);
}else{
reject(Error("Could not execute"));
}
});
}
exports.list = function(req, res) {
console.log('Before');
listPromise().then(function(fulfilled) {
res.json(fulfilled);
})
.catch(function (error) {
res.send(error.message);
});
console.log('After');
};
【问题讨论】:
-
Promise 不会被“执行”,你不能使用它们来并行执行阻塞代码。它们是代表某些异步操作的未来结果的值,仅此而已。您的
pause函数不是异步的,这很糟糕 - 请改用setTimeout。 -
好吧,我想我开始明白了。承诺中的代码应该是异步的。例如,如果我将 setTimeout() 与回调函数一起使用?
-
是的。我已在答案中举例说明了我的评论。
标签: javascript node.js express promise