Node.js Express响应在Promise解析之前结束

时间:2017-10-22 04:19:55

标签: javascript node.js express

使用Express在Node.js上执行以下代码,但它不返回任何内容。看起来res.send在promise.then()中不起作用;看起来它已经在promise resolve()之前返回给调用者;我做错了什么?根据例子,它应该工作。感谢。

    const express = require('express');
    const app = express();

    app.get('/test', (req, res, next) => {
      res.send("Good");  // Works Just Fine , but I dont need to return here
      getMessage().then(function(data){
          console.log("I'm here"); // Message works
          res.send("Good");  // Does not Work 
        }).catch(function(error){
          res.send("Error");
      });
    });

    function getMessage(){
        return new Promise(function(resolve, reject){        
           setTimeout(function() {
            resolve();
    }, 3000);
        });    
    }
  app.listen(PORT, () => {
console.log("run");
});

Response

4 个答案:

答案 0 :(得分:1)

请在您的应用中添加以下代码:Refer Here

此应用启动服务器并侦听端口8080以获取连接

app.listen(8080, function () {
  console.log('Example app listening on port 8080!')

})

答案 1 :(得分:0)

您需要侦听端口以便运行快速服务器。

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/test', (req, res, next) => {
  getMessage().then(function(data){
      res.send("Good");  
    }).catch(function(error){
      res.send("Error");
  });
});

function getMessage() {
    return new Promise((resolve, reject) => {        
       setTimeout(function() {
        resolve();
       }, 3000);
    });    
}

app.listen(port, () => console.log(`App listening at http://localhost:${port}`));

答案 2 :(得分:0)

问题在于Postman中的请求超时设置,我正在使用它进行测试。

答案 3 :(得分:0)

删除第一个

res.send('good');

或者您可以先 res.write() 那么应该在 res.send()

时将邮件串联起来
res.write('good')

res.send()关闭服务器与客户端之间的连接 因此,使用res.write()将写消息,并且在发送res.send()时,所有已写消息(使用res.write())都将发送回客户打电话给

穿着短裤
res.write()可能会发生多次
res.send()仅在每个请求中发生一次