我正在尝试从数据库“neo4j”获取数据
我已经创建了一个 Controller 和一个模型。 Controller 调用模型,模型从数据库中获取数据。
Controller 是一个异步函数,正在等待模型函数提供数据。
模型是一个从数据库获取数据的 promise 。
模型中的结果是正确的,但 Controller 中的结果未定义。请帮忙。
var neo4j = require("neo4j-driver").v1;
var driver = neo4j.driver(
"bolt://localhost:7687",
neo4j.auth.basic("neo4j", "password")
);
var session = driver.session();
function get4fomDb() {
try {
resultPromise = session.run("Match(n) return n");
resultPromise.then(result => {
session.close();
driver.close();
console.log("MODEL RESULT : ", result);
return result;
});
resultPromise.catch(function(err) {
console.log("===========ERROR in DB=====================");
console.log("ERROR : ", err);
console.log("=========================================");
return err;
});
} catch (err) {
console.log("Error : ", err);
return "ERROR in CATCh";
// res.send("404 : Page not found ")
} finally {
}
}
async function controller() {
let result = await get4fomDb();
console.log("CONTROLLER RESULT : ", result);
}
controller();
输出:
[nodemon] starting `node .\app.js`
CONTROLLER RESULT : undefined
MODEL RESULT : { records:
[ Record {
keys: [Array],
length: 1,
_fields: [Array],
_fieldLookup: [Object] },
Record {
keys: [Array],
length: 1,
_fields: [Array],
_fieldLookup: [Object] } ],
summary:
ResultSummary {
statement: { text: 'Match(n) return n', parameters: {} },
statementType: 'r',
counters: StatementStatistics { _stats: [Object] },
updateStatistics: StatementStatistics { _stats: [Object] },
plan: false,
profile: false,
notifications: [],
server:
ServerInfo { address: 'localhost:7687', version: 'Neo4j/3.5.12' },
resultConsumedAfter: Integer { low: 0, high: 0 },
resultAvailableAfter: Integer { low: 0, high: 0 } } }
最佳答案
您并没有真正从 get4fomDb
返回 promise (因为 promise 是通过 then/catch
自行处理的)。
如果这个session.run('Match(n) return n');
是一个promise
,只需从返回它get4fomDb
并在 contoller()
中使用 try/catch
和 await
。这也使得代码更具可读性。
另外,也不建议混合使用 async/await
或 promise.then().catch()
模式,坚持使用其中一种。
function get4fomDb() {
return session.run("Match(n) return n");
}
async function controller() {
try {
let result = await get4fomDb();
console.log("Promise results::", result);
} catch (error) {
console.error("Error from db promise::", error);
} finally {
session.close();
driver.close();
}
}
controller();
关于javascript - 在 NodeJS 中,带有 Promise 的数据库结果未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59006994/