Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 使用async/await进行sql数据插入_Javascript_Node.js_Async Await - Fatal编程技术网

Javascript 使用async/await进行sql数据插入

Javascript 使用async/await进行sql数据插入,javascript,node.js,async-await,Javascript,Node.js,Async Await,事情是这样的 我的梦想算法分为4个阶段 递归扫描所有路径 将每个数据插入临时表 在主表上移动时态数据,无重复 当前主表 事情有秩序是很重要的。但是我不太明白asyncwait到底是什么…好吧,这是一个经过大量修改的代码清理版本 function Recursive_scan_and_Insert (path_dir) { //scanning path_dir recursively and insert filepath into temporary list Recursive_Sc

事情是这样的

我的梦想算法分为4个阶段

  • 递归扫描所有路径
  • 将每个数据插入临时表
  • 在主表上移动时态数据,无重复
  • 当前主表

  • 事情有秩序是很重要的。但是我不太明白async
    wait
    到底是什么…

    好吧,这是一个经过大量修改的代码清理版本

    function Recursive_scan_and_Insert (path_dir) { //scanning path_dir recursively and insert filepath into temporary list
        Recursive_Scan(path_dir, (err, files) => { //it's from npm recursive_readdir
            if(err) {
                console.log(err);
                res.status(500).send('server error');
            }
    
            files.forEach(elements => {
                let params = [elements]; //
                DB("GET", "INSERT INTO filelist_t VALUES (null, ?, NOW(), 0, 0)", params).then(function(res) {
                    console.log('data input');
                });
            });
        });
    };
    
    function Add_to_DB () { //moving temporal list to main list without duplicate
        DB("GET", "INSERT INTO filelist (id, path, addeddate, isdeleted, ismodified) SELECT NULL, filelist_t.path, filelist_t.addeddate, filelist_t.isdeleted, filelist_t.ismodified FROM filelist_t LEFT JOIN filelist ON filelist.path = filelist_t.path WHERE filelist.id IS NULL; DELETE FROM filelist_t; ").then(function(res) {
            console.log('data moving');
        });
    };
    
    
    app.get('/db', (req, res) => { //PROBLEM PART
    
        async function async_Two_Functions () {
            var object_path = '/want/to/scan/path';
            await Recursive_scan_and_Insert(object_path).then( () => {
                return Add_to_DB()
            })
        }
        async_Two_Functions();
        res.send(res);
    });
    
    app.get('/dbp', (req, res) => { //show main list to my web
        DB("GET", "SELECT * FROM filelist").then(function(res2) {
            res.send(res2.row);
        });
    });
    
    变化:

  • 从每个包含异步操作的函数返回一个承诺
  • 从每个
    .then()
    处理程序返回您希望为承诺解析的值
  • 承诺使用常规回调的任何内容,以便您可以使用承诺执行所有控制流
  • 使用
    Promise.all()
  • 根据需要使用
    async/await
    ,尤其是当您想对多个异步操作进行排序时
  • 在任何
    wait
    周围使用
    try/catch
    ,以捕获被拒绝的承诺,这些承诺不会返回到更高的级别,从而被捕获
  • .catch()
    与任何未返回到更高级别的
    一起使用
  • 开放性问题:

  • 不知道要从
    app.get('/db',…)
    发送什么响应。你得把它填上
  • 您是否希望从
    递归\u扫描\u和\u插入()
    中得到任何解析值
  • Add_to_DB()
    真的不接受任何输入吗?它只是重新组织数据库中已有的内容

  • 这是一个经过清理的代码版本,有很多改动

    function Recursive_scan_and_Insert (path_dir) { //scanning path_dir recursively and insert filepath into temporary list
        Recursive_Scan(path_dir, (err, files) => { //it's from npm recursive_readdir
            if(err) {
                console.log(err);
                res.status(500).send('server error');
            }
    
            files.forEach(elements => {
                let params = [elements]; //
                DB("GET", "INSERT INTO filelist_t VALUES (null, ?, NOW(), 0, 0)", params).then(function(res) {
                    console.log('data input');
                });
            });
        });
    };
    
    function Add_to_DB () { //moving temporal list to main list without duplicate
        DB("GET", "INSERT INTO filelist (id, path, addeddate, isdeleted, ismodified) SELECT NULL, filelist_t.path, filelist_t.addeddate, filelist_t.isdeleted, filelist_t.ismodified FROM filelist_t LEFT JOIN filelist ON filelist.path = filelist_t.path WHERE filelist.id IS NULL; DELETE FROM filelist_t; ").then(function(res) {
            console.log('data moving');
        });
    };
    
    
    app.get('/db', (req, res) => { //PROBLEM PART
    
        async function async_Two_Functions () {
            var object_path = '/want/to/scan/path';
            await Recursive_scan_and_Insert(object_path).then( () => {
                return Add_to_DB()
            })
        }
        async_Two_Functions();
        res.send(res);
    });
    
    app.get('/dbp', (req, res) => { //show main list to my web
        DB("GET", "SELECT * FROM filelist").then(function(res2) {
            res.send(res2.row);
        });
    });
    
    变化:

  • 从每个包含异步操作的函数返回一个承诺
  • 从每个
    .then()
    处理程序返回您希望为承诺解析的值
  • 承诺使用常规回调的任何内容,以便您可以使用承诺执行所有控制流
  • 使用
    Promise.all()
  • 根据需要使用
    async/await
    ,尤其是当您想对多个异步操作进行排序时
  • 在任何
    wait
    周围使用
    try/catch
    ,以捕获被拒绝的承诺,这些承诺不会返回到更高的级别,从而被捕获
  • .catch()
    与任何未返回到更高级别的
    一起使用
  • 开放性问题:

  • 不知道要从
    app.get('/db',…)
    发送什么响应。你得把它填上
  • 您是否希望从
    递归\u扫描\u和\u插入()
    中得到任何解析值
  • Add_to_DB()
    真的不接受任何输入吗?它只是重新组织数据库中已有的内容

  • 你可以找到一个非常好的概述。详细描述了它的工作原理。您的问题是什么?你的代码哪一部分需要帮助?@jfriend00哦,我错了。很明显,
    app.get('/db',..
    不是异步工作的。你可以找到一个非常好的概述。它是如何工作的详细描述。你的问题是什么?你需要帮助代码的哪一部分?@jfriend00哦,我的错误。很明显,
    app.get(“/db',…
    不是异步工作的。非常感谢您的详细回答。我想在这里回答您的问题。3.
    将_添加到_db
    看起来很长,但它只是作为“发送查询”函数的角色。所以实际上,它没有必要。但我不知道如何异步“发送查询”还有其他函数。所以我结束了。2.
    递归扫描和插入()
    没有返回。因为它是为一个按钮而存在的。非常感谢您的详细回答。我想在这里回答您的问题。3.
    添加到\u DB
    看起来很长,但它只是作为“发送查询”的角色函数。所以实际上,它不是必需的。但我不知道如何与其他函数异步“发送查询”。所以我结束了。2.
    递归扫描和插入()
    没有返回。因为它是为按钮而存在的。