Javascript 如何使用node js按顺序访问多个表?
我必须使用node js从数据库访问多个表,并将结果添加到数组中。然而,我无法理解如何在节点异步运行时按顺序访问表。我需要先保存一个表的结果,然后才能访问下一个表。下面是我如何访问reach表数据库的示例Javascript 如何使用node js按顺序访问多个表?,javascript,node.js,asynchronous,callback,Javascript,Node.js,Asynchronous,Callback,我必须使用node js从数据库访问多个表,并将结果添加到数组中。然而,我无法理解如何在节点异步运行时按顺序访问表。我需要先保存一个表的结果,然后才能访问下一个表。下面是我如何访问reach表数据库的示例 function gettable1 (id, cb) { table1.getData1(connection, id, function(err, data) { if (err) { return console.log(err); } myArray +
function gettable1 (id, cb) {
table1.getData1(connection, id, function(err, data) {
if (err) { return console.log(err); }
myArray += data.response;
cb();
});
}
function gettable2(id, cb) {
table2.getData2(connection, id, function(err, data) {
if (err) { return console.log(err); }
myArray += data.response;
cb();
});
}
... etc.
function gettable5(id, cb) {
table5.getData5(connection, id, function(err, data) {
if (err) { return console.log(err); }
myArray += data.response;
cb();
});
}
gettable1(id, callback);
gettable2(id, callback);
....
gettable5(id, callback);
return myArray;
那么,如何确保在执行gettable2之前完成对gettable1的调用呢?变量myArray在任何表调用完成之前返回。节点中的异步处理确实让我感到困惑,对于如何编写逻辑代码以使表按顺序而不是异步处理,我非常感谢任何反馈。您可以嵌套回调:
sql.query(myQuery, function() {
sql.query(myNextQuery, function() {
// etc....
或者(我建议)使用类似的库。如果希望回调是连续的,则需要嵌套回调
gettable1(id, function(){
gettable2(id, function(){
gettable3(id, function(){
// got all tables
});
});
});
当然,如果有太多的级别,并且有几十种方法可以通过各种权衡使代码看起来更好,那么代码就会变得有点难看。在您的情况下使用Promise。为每个函数调用和使用创建承诺
Promise1.then(function(result){
Promise2.then(function(result){
....
});
});
我想我已经试过了,但问题是我必须知道哪一个会最后完成,这样我才能返回我的数组。我会再试一次,感谢大家的反馈。很抱歉,嵌套回调也不起作用。问题在于不要过早地结束嵌套函数。我的最后一个函数只是返回数组,但它在回调完成之前返回。那么,如何防止在表回调完成之前执行最后一个非回调函数(它将所有内容都聚集在一起)?什么是过早结束?其中一个函数出现错误并转到
if(err)
分支?您能更具体一点吗?也许在你的例子中加入我的函数名?我在angular jscript中使用了promise,但在node中没有使用。是一样的吗?