javascript - 为什么这个 Javascript promise 不起作用?

标签 javascript node.js asynchronous promise

我正在学习 promises。

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

});

这很好用。 虽然这太简单了。为了写一些“冗长”的东西,我将代码移出 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;
        })

    }

那么为什么 message() 函数中的 return 语句不返回消息呢?将此类有前途的代码从我的路由函数中移出的最佳做法是什么?

最佳答案

首先,您有一个名为 message 的局部变量,它屏蔽了具有相同名称并引用函数的模块级变量。您需要重命名其中一个。

然后:message 函数没有返回语句,因此它返回 undefined

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

  1. 兑现 promise
  2. 在其上调用然后
  3. 在传递给 then 的函数中使用 res.json(...);

例如:

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;
}

关于javascript - 为什么这个 Javascript promise 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49177520/

相关文章:

javascript - JavaScript 中的同步回调函数有什么用?

c# - 实现 ValueTaskSource.SetCompleted 的正确方法是什么

javascript - 没有 jsx 的 react ,我可以使用模板字符串而不是 createElement 吗?

node.js - 如何从 Node js api 调用返回字符串

javascript - 无法将 QQmlListReference 分配给 QString

javascript - 未处理的拒绝 TypeError : Cannot read property 'username' of null

javascript - 使用 Node(在 Windows 上)查找 PDF 页数

javascript - Graphql 解析器未返回任何数据

javascript - 延迟()或停止()超时?

javascript - NodeJS/SailsJS 中 next() 的具体作用是什么?