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

时间:2017-02-10 01:41:01

标签: javascript node.js express

好吧,我一直在寻找高低,显然我错过了一招。

标准NodeJS / Express组合,进行数据库调用(thistakesalotoftime()),可能需要一段时间才能完成。如果我在第一个请求正在进行时收到新请求,则第一个任务的呈现结果有时会流式传输到请求#2的响应。

介意,我对NodeJS有些新鲜,主要来自PHP背景。从未遇到过Apache的问题:)

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

即使这个极其简化的应用实例也会发生这种情况。请赐教。欢迎任何和所有提示。

0 个答案:

没有答案