gpt4 book ai didi

javascript - 如何使用nodejs获取异步数据

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:26 25 4
gpt4 key购买 nike

我正在尝试使用 nodejs 从 mysql 表中获取数据。我调用另一个 Node js 文件中的 sql 例程。但是,我无法获得返回数据的回调。我认为问题可能是我从 Node js 文件而不是从 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];
});

}

我知道这是有效的,因为我正在将结果写入控制台。问题是数据永远不会返回到下面的调用 Node 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 = function (db, id, cb) { 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']);
cb({
success: true,
response: rows
});
// return rows[0];
});

并这样使用它:

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

一个警告:传统上,回调将第一个参数作为错误(或 null),然后是实际数据。考虑到这一点:

exports.getVenueById = function (db, id, cb) { 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) { cb(err); }
console.log("rows=" + rows[0]['auto_increment']);
cb(null, {
success: true,
response: rows
});
// return rows[0];
});

并这样使用它:

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

关于javascript - 如何使用nodejs获取异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com