首页 > 解决方案 > 如何从异步/等待函数返回值

问题描述

我正在尝试编写一个可重用的函数,该函数在解决来自 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;

  }

标签: node.jsmongodbasync-await

解决方案


由于 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;
    }

推荐阅读