如果在其他地方已经回答了这个问题,我道歉。过去几个小时我一直坚持这个问题。我有一个简单的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
});