Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 节点-来自回调的SQLite解析承诺_Javascript_Node.js_Sqlite - Fatal编程技术网

Javascript 节点-来自回调的SQLite解析承诺

Javascript 节点-来自回调的SQLite解析承诺,javascript,node.js,sqlite,Javascript,Node.js,Sqlite,我在节点异步行为方面遇到问题,我有以下代码片段: async function f(db, id) { return new Promise(function (resolve, reject) { logger.log("A"); db.run('INSERT INTO s(a,b,c,d) VALUES(?,?,?,?)', ['a', 'b', 'c', 0], function(err) { consol

我在节点异步行为方面遇到问题,我有以下代码片段:

async function f(db, id) {
   return new Promise(function (resolve, reject) {
      logger.log("A");
      db.run('INSERT INTO s(a,b,c,d) VALUES(?,?,?,?)', ['a', 'b', 'c', 0],
            function(err) {
               console.log("B");
               if(err) {
                  console.error(`Err:\n\t${err}`);
                  reject(err);
               }
               db.run('UPDATE t SET a = ? WHERE id = ?', [this.lastID, id],
                     function(err) {
                        console.log("C");
                        if(err) {
                           console.log(`Err:\n\t${err}`);
                           reject(err);
                        }
                        resolve("Done!");
                     }, resolve, reject, id);
            }, resolve, reject, db, id);
   });
   console.log("D");
}
这是一个简单的基于SQLite的应用程序,其思想是在表s上插入一个条目,然后根据第一个insert查询的返回值(ID)更新表T上的一个条目,但是我不确定如何从回调内部解析返回的承诺。 调用此函数时,承诺永远不会解析,最终会被拒绝为null

称之为:

async function g(db) {
   var p = f(db, "testid").catch(function(err) { console.log("ERROR: ${err}"); });
   var ret = await p;
   console.log(`ret: ${ret}`);
   return ret
}
结果:

A
D
ERROR: null
ret: undefined
我很确定这里的问题是我的异步设计有问题,所以我有两个问题

1-为什么“B”或“C”永远不会被打印出来

2-构建此结构的正确方式是什么


关于正确的节点设计的任何材料都将受到高度赞赏,我喜欢Node.js,但我认为我在这方面做得很差。

我相信您需要等待内部异步函数。或者原始的DB.run