javascript - 如何使用node js从.then返回neo4j查询结果
问题描述
我需要使用 Node JS 的 Neo4j 驱动程序来获取返回的数据。我的问题是,我可以在 .then 调用内的控制台上打印 'online' 的值,但我似乎无法在该部分之外访问它 - 我尝试返回record.get('onl')
,将其分配给预定义函数外部的变量,但没有任何作用 - 例如,如果我尝试online
在此代码段的最后一行打印 out 的值,我得到的结果就是Promise { <pending> }
. 我想我没有正确处理承诺,我查阅了很多教程和示例,但我无法解决。那么:我如何将返回的数据分配(record.get('onl'))
给var online
并获得实际结果而不是承诺?提前致谢 :)
var online = session.run(cyp1, param).then(results => {
return results.records.map(record =>{
console.log(record.get('onl'))
return record.get('onl')
})
}).then(()=>{
session.close()
});
console.log(online)
解决方案
目前,您将 var 分配online
为“承诺链”而不是“已解决的承诺”。您可以使用Async/Await这将允许您以同步方式编写异步代码。
async function getRecords(){
const records = await session.run(cyp1, param);
return records.map(record => record.get('onl'))
}
const online = await getRecords();
使用 try/catch/finally
try {
const online = await getRecords();
} catch (error) {
// do something
} finally {
await session.close()
}
如果您想继续使用.then()
您需要使用“Promise Chaining”并传递值“Down the chain”,这会导致复杂的“Callback”/“Promise Chain”地狱。
session.run(cyp1, param).then(results => {
return results.records.map(record => record.get('onl'))
}).then((online)=> {
console.log(online)
}).catch(() => {
// do something
}).finally(() => {
session.close()
});
推荐阅读
- python - 使用 xpath 和 python 3.6 从字符串中提取数字
- html - Less 和 SCSS 计算函数
- php - 登录到 Outlook 帐户时 Outlook 休息 api 重定向“太多次”
- menu - Zurb Foundation 菜单可访问性 - 子菜单切换按钮
- r - 如何像在 SQL 中一样在 R 中分组?
- android - Firebase onTokenRefresh() 未被调用且通知不起作用
- sql - UPDATE 命令出现语法错误
- python - 模块中所有功能的 Numpy seterr
- r - 如何在 R Shiny 中保存/下载条形图?
- python - 请求完成后 Scrapy 迭代器立即停止