node.js - 如何从异步/等待函数返回值
问题描述
我正在尝试编写一个可重用的函数,该函数在解决来自 mongodb 查询的承诺之前不会返回。我几乎可以使用 IIFE 函数来实现这一点,但在我从函数返回之前似乎无法访问解析的值。在下面的代码段中,我可以将变量 d 打印到控制台,但我无法在 iffe 之外访问它,因此无法返回结果。
在下面的示例中,第一个 console.log 返回正确的结果,但第二个返回一个未决的承诺。任何有关如何使这项工作或替代方法的建议将不胜感激。
function getDNInfo (party){
var result;
result= (async () => { result = await mongo.findOne({DN:party.user_Number}, "BWUsers")
.then(
(d)=>{
console.log(d)
result=d;
}"
)}
)();
console.log(result)
return result;
}
解决方案
由于 Async 函数返回一个承诺,因此使用方法 1 我们可以跳过编写 await ,因为它会自动等待查询得到解决而无需编写 await 或者您始终可以使用方法 2 进行传统的实现方式。
方法一:
const getDNInfo = async (party) => {
return mongo.findOne({DN:party.user_Number}, "BWUsers");
}
方法二:
const getDNInfo = async (party) => {
const result = await mongo.findOne({DN:party.user_Number}, "BWUsers");
return result;
}
推荐阅读
- python-3.x - 这是在 python 中获得类似 switch case 功能的有效方法吗?
- excel - Excel 匹配功能无法与 MS-Graph API 一起正常工作
- git - 为什么我不能使用 git rm 删除除特定文件类型之外的所有文件?
- javascript - 如何将键值对添加到以键为变量的javascript对象
- angular - Angular - 为什么使用 2-way 绑定而不是 1-way 并直接修改父 Input()?
- python - Matplotlib PGF 后端可以生成 PDF 文件而不是 PNG 吗?
- assembly - DOS未指定错误后可能会停止系统
- excel-formula - 如何修复“替换空白公式的 0 值”
- r - 计算向量中左右邻居平均值的向量化方法
- ios - 为什么 CTFrameGetLines 返回错误结果?