Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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 如何使用nodejs获取异步数据_Javascript_Mysql_Node.js_Asynchronous_Callback - Fatal编程技术网

Javascript 如何使用nodejs获取异步数据

Javascript 如何使用nodejs获取异步数据,javascript,mysql,node.js,asynchronous,callback,Javascript,Mysql,Node.js,Asynchronous,Callback,我正在尝试使用nodejs从mysql表获取数据。我调用另一个节点js文件中的sql例程。但是,我无法通过回调返回数据。我认为问题可能在于,我是从NodeJS文件调用异步例程,而不是从angular或常规javascript程序调用。下面是我正在调用的导出脚本 exports.getVenueById = function(db, id) { var http = require('http'); var mysql = require('mysql'); var qu

我正在尝试使用nodejs从mysql表获取数据。我调用另一个节点js文件中的sql例程。但是,我无法通过回调返回数据。我认为问题可能在于,我是从NodeJS文件调用异步例程,而不是从angular或常规javascript程序调用。下面是我正在调用的导出脚本

exports.getVenueById = function(db, id) {
    var http = require('http');
    var mysql = require('mysql');

    var query = "SELECT *  FROM venues WHERE auto_increment = ? "
    query = mysql.format(query, id);
    console.log("query=" + query);

db.query(
    query,
    function(err, rows) {
        if(err) console.log("error=" + err);
        console.log("rows=" + rows[0]['auto_increment']);
        res.json({success: true, response: rows});
        //return rows[0];
     });

}
我知道这是可行的,因为我正在将结果写入控制台。问题是数据永远不会返回到下面的调用节点js例程

function getVenueData (id , callback)  {             
  (function () {
     venueData = venueTable.getVenueById(db, id);           
     if(venueData) {
         callback();
         console.log("callback in loop");
      }
      console.log("callback after loop");        
  });        
}

getVenueData(id, gotVenueData);
程序立即返回并显示超时消息。我承认我不是nodejs或其回调功能的专家。对于如何让程序等待异步数据返回调用程序的任何反馈,我将不胜感激

function gotVenueData() {
  console.log("gotVenueData");
}

setTimeout(function() { console.log("timeout for 10 seconds");} , 10000);
console.log("venuedata=" + venueData);

您正在尝试同步返回异步数据。相反,将回调添加到getVenueById:

exports.getVenueById=函数(db、id、cb){ var http=require('http'); var mysql=require('mysql')

并按如下方式使用:

venueTable.getVenueById(db, id, function(data) {
  console.log(data);
});
venueTable.getVenueById(db, id, function(err, data) {
  if (err) { return console.log(err); }
  console.log(data);
});
一个警告:传统上,回调函数的第一个参数是错误(或
null
),然后是实际数据。记住:

exports.getVenueById=函数(db、id、cb){ var http=require('http'); var mysql=require('mysql')

并按如下方式使用:

venueTable.getVenueById(db, id, function(data) {
  console.log(data);
});
venueTable.getVenueById(db, id, function(err, data) {
  if (err) { return console.log(err); }
  console.log(data);
});

您正在尝试同步返回异步数据。请改为向getVenueById添加回调:

exports.getVenueById=函数(db、id、cb){ var http=require('http'); var mysql=require('mysql')

并按如下方式使用:

venueTable.getVenueById(db, id, function(data) {
  console.log(data);
});
venueTable.getVenueById(db, id, function(err, data) {
  if (err) { return console.log(err); }
  console.log(data);
});
一个警告:传统上,回调函数的第一个参数是错误(或
null
),然后是实际数据。记住:

exports.getVenueById=函数(db、id、cb){ var http=require('http'); var mysql=require('mysql')

并按如下方式使用:

venueTable.getVenueById(db, id, function(data) {
  console.log(data);
});
venueTable.getVenueById(db, id, function(err, data) {
  if (err) { return console.log(err); }
  console.log(data);
});

它不被认为是答案,但您的第一个代码部分有一个输入错误。您在
var query=“SELECT*FROM victions WHERE auto_increment=?”后面缺少一个分号
答案中也缺少了它@SomeKittens@morten.c奇怪的是,没有被ping到那里。在我的答案中修复了它。拼写错误不太严重,因为JS会自动添加它。感谢您找到拼写错误。它不被认为是答案,但您的第一个代码部分有一个拼写错误。您在
var query=“从自动增量=?"
答案中也缺少了它@SomeKittens@morten.c奇怪的是,没有被ping到那里。在我的答案中修复它。这不是太严重的打字错误,因为JS会自动添加它。感谢你找到了打字错误。哇!感谢你在回调的世界里教育我。我应用了你的更改,数据回来了。我需要复习更多关于cal的内容lbacks因为这就是nodejs的力量。我在互联网上搜索了一个我想做的例子,你就是那个给我看的人。非常感谢!@Dave没问题,谢谢你的接受!别忘了上传你如何通过异步mysql插入查询获得正确的最后一个插入id?哇!感谢你在世界上教育我关于回调。我应用了你的更改,数据回来了。我需要更多地了解回调,因为这是nodejs的力量。我搜索了互联网,试图找到一个我想做的例子,而你就是向我展示的人。非常感谢!@Dave没问题,谢谢你的接受!别忘了更新你是如何获得corr的ect last_insert_id与异步mysql insert查询?