为什么这个Javascript承诺不起作用?

Ram*_*eek 1 javascript asynchronous node.js promise

我正在学习承诺.

app.get('/message',function(req, res){    
    var promise = new Promise(function(resolve, reject){
        resolve("hi");
    });
    promise.then(function(message){
       res.json(message);
    })

});
Run Code Online (Sandbox Code Playgroud)

这很好用.虽然这太简单了.为了写"冗长"的东西,我把代码移出app.get()并试图从外部函数返回消息......像这样:

    app.get('/message',function(req, res){ 
      var message = message(); // I also tried wrapping this in promise and calling `res.json` in `promise.then()` but no luck
       res.json(message);
    });

    function message(){    
        var promise = new Promise(function(resolve, reject){
            resolve("hi");
        });
        promise.then(function(message){
           return message;
        })

    }
Run Code Online (Sandbox Code Playgroud)

那么为什么函数中的return语句不message()返回消息呢?什么是将这些promising代码移出路线功能的最佳做法?

Que*_*tin 8

首先,您有一个名为local的变量message,它掩盖了具有相同名称并引用函数的模块级变量.您需要重命名其中一个.

然后:你没有message函数的return语句,所以它返回undefined.

如果你想在你传递的回调函数中得到承诺的结果,get那么你需要:

  1. 回报承诺
  2. 打电话then给它
  3. res.json(...);在您传递给的函数内使用then

例如:

app.get('/message',function(req, res){ 
  var my_message = message(); 
  my_message.then(function (data) {
     res.json(data);
 });
});

function message(){    
    var promise = new Promise(function(resolve, reject){
        resolve("hi");
    });
    return promise;
}
Run Code Online (Sandbox Code Playgroud)