Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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 如何使用node js按顺序访问多个表?_Javascript_Node.js_Asynchronous_Callback - Fatal编程技术网

Javascript 如何使用node js按顺序访问多个表?

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 +

我必须使用node js从数据库访问多个表,并将结果添加到数组中。然而,我无法理解如何在节点异步运行时按顺序访问表。我需要先保存一个表的结果,然后才能访问下一个表。下面是我如何访问reach表数据库的示例

    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中没有使用。是一样的吗?