将结果传递出 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 等转译器,或者只升级节点 :)
我将以下代码与 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 等转译器,或者只升级节点 :)