如何在promise回调中使用Express响应

时间:2017-05-04 17:34:08

标签: javascript node.js express promise

如果在其他地方已经回答了这个问题,我道歉。过去几个小时我一直坚持这个问题。我有一个简单的nodejs应用程序,它接受从前端发布的消息,使用消息调用异步服务,并返回响应。以下是代码:

('#btn').click(function (e) {
    var message = $('#message').val();
    $.ajax({
        method: "POST",
        url: "./api/text",
        contentType: "application/json",
        data: JSON.stringify({ text: message })
    })
    .done(function (res) {
        console.log('Never receiving response'); // Log never hit
        $('#msg_response').html(res);
    });
});

/////////////////////////////////////////////////////////////////////////

app.post("/api/text", function(request, response) {
  var message = request.body.text;

  var client = new Client();

  client.doSomethingAsync({
      data: message
  }, function (err, msg) {
      // Getting here, but never returning to 'done' above
      response.json(msg);
  });
});

问题是来自“post”请求的响应永远不会从服务器接收。我认为它与回调函数中发送的响应有关,因为如果我从回调中取出响应,一切都很好。是否可以从异步调用发回响应?

感谢您的帮助。

编辑:已更新至最近的代码尝试次数。

编辑:有一些关于client.doSomethingAsync()如何工作的问题。它只是通过HTTP请求将传入的数据发送到不同的服务。然后将响应传递回回调。我确信这个方法运行正常,因为我能够看到消息作为响应传回,并验证服务是否被调用。

编辑:补充证据表明回调中发生了一些奇怪的事情。下面的代码正确运行并正确返回'完成'回调:

app.post("/api/text", function(request, response) {
  var message = request.body.text;

  var client = new Client();

  client.doSomethingAsync({
      data: message
  }, function (err, msg) {
      console.log(msg);  // logs a json object
  });

  response.json({ test: 'test' }); // Returns successfully
});

0 个答案:

没有答案