Javascript 在异步回调中丢失响应对象
好吧,我一直在到处寻找,显然我错过了一个技巧 标准的NodeJS/Express组合,执行数据库调用(thistakesalotoftime()),这可能需要一段时间才能完成。如果我在第一个任务进行时收到一个新请求,第一个任务的渲染结果有时会流式传输到请求2的响应 请记住,我对NodeJS有些新鲜,主要来自PHP背景。Apache从未遇到过这样的问题:)Javascript 在异步回调中丢失响应对象,javascript,node.js,express,Javascript,Node.js,Express,好吧,我一直在到处寻找,显然我错过了一个技巧 标准的NodeJS/Express组合,执行数据库调用(thistakesalotoftime()),这可能需要一段时间才能完成。如果我在第一个任务进行时收到一个新请求,第一个任务的渲染结果有时会流式传输到请求2的响应 请记住,我对NodeJS有些新鲜,主要来自PHP背景。Apache从未遇到过这样的问题:) 即使使用这个极其简化的应用程序实例,也会发生这种情况。请告诉我。欢迎提供任何建议 欢迎来到堆栈溢出!请您的问题显示相关代码(即复制问题所需的最
即使使用这个极其简化的应用程序实例,也会发生这种情况。请告诉我。欢迎提供任何建议 欢迎来到堆栈溢出!请您的问题显示相关代码(即复制问题所需的最低代码)。您能否准确解释“渲染结果流化”的含义?你的意思是第二个请求得到第一个请求所要求的数据,反之亦然吗?@Hamms这正是发生的情况。似乎是一种种族。请求#1请求特定的数据项,请求#2请求不同的数据项。99%的情况下有效,只是有时候请求者2最终得到了1应该得到的答案#在这种情况下,我会坐在那里,最终超时,这让我认为响应对象被覆盖了。这背后的数据库是一个非常大的MySQL,具体的查询大约需要1s才能完成。您实际的
thistakesalotoftime
功能是什么?提供的代码不足以复制。您似乎缺少connection.end()
。不知道您显示的代码如何导致您描述的问题。一定有比你展示的更多的东西。仅供参考,抛出错误
是不可接受的错误处理。在异步回调中,这不会做任何有用的事情。
var express = require('express');
var app = express();
var mysql = require('mysql');
function thistakesalotoftime(cb) {
var connection = mysql.createConnection({
host : '127.0.0.1',
user : 'bob',
password : 'uncle'
});
connection.connect(function(err) {
console.log('connected as id ' + connection.threadId);
});
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
cb(results.solution);
});
}
app.get('/', function (req, res) {
thistakesalotoftime(function(data) {
res.send(data);
});
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});