将结果传递出 NodeJS 数据库函数以在其外部使用

Passing results out of NodeJS database function to use outside of it

我将以下代码与 SQLite3 npm 模块一起使用。

db.all("SELECT * FROM posts WHERE id = '3', function(err, rows) {
   return rows
})

我想在此代码之外访问 rows 中的数据,例如...

db.all("SELECT * FROM posts WHERE id = '3', function(err, rows) {
   return rows
}) 

// >>> *** I want to call the results for rows here ***

有人可以用一个简单的例子来解释这是如何完成的吗?

您可以使用 promise,例如:

new Promise(function (resolve, reject) {
  db.all("SELECT * FROM posts WHERE id = '3', function(err, rows) {
    // Check if there's an error, if it exists the promise will end up.
    if (err) {
      reject(err)
      return
    }

    resolve(rows)
  })
}).then(function (rows) {
  // You can make use of your code here
}).catch(function (err) {
  console.log(err)
})

Promises 异步操作,因此一旦从您的数据库中读取数据,它就会 resolved

你去 here 多学一点。文档很棒。

您无法从回调外部访问行,因为它是异步的,回调会告诉您何时可以实际使用它。

但是,如果您不喜欢嵌套回调,您可以使用 async / await

const { promisify } = require('util');

const dbAllAsync = promisify(db.all);

(async function() {
    const rows = await dbAllAsync("SELECT * FROM posts WHERE id = '3'");
    console.log(rows); // you can use rows here
})();

警告:

检查您的节点版本是否支持promisify。如果它不使用诸如 bluebird 之类的库。同样适用于 async / await,在这种情况下,您可以使用 babel 等转译器,或者只升级节点 :)