Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在异步回调中丢失响应对象_Javascript_Node.js_Express - Fatal编程技术网

Javascript 在异步回调中丢失响应对象

Javascript 在异步回调中丢失响应对象,javascript,node.js,express,Javascript,Node.js,Express,好吧,我一直在到处寻找,显然我错过了一个技巧 标准的NodeJS/Express组合,执行数据库调用(thistakesalotoftime()),这可能需要一段时间才能完成。如果我在第一个任务进行时收到一个新请求,第一个任务的渲染结果有时会流式传输到请求2的响应 请记住,我对NodeJS有些新鲜,主要来自PHP背景。Apache从未遇到过这样的问题:) 即使使用这个极其简化的应用程序实例,也会发生这种情况。请告诉我。欢迎提供任何建议 欢迎来到堆栈溢出!请您的问题显示相关代码(即复制问题所需的最

好吧,我一直在到处寻找,显然我错过了一个技巧

标准的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!');
});