【问题标题】:How to wait for a mongoose promise that is inside a function? [duplicate]如何等待函数内部的猫鼬承诺? [复制]
【发布时间】:2021-01-18 13:38:24
【问题描述】:

我为需要从模型 User 获取数据的种子进行了以下测试。我认为我的问题是 testFunction 在其值在 .then() 中更新之前返回 name

我显然不明白这里的流程是如何运作的。任何人都知道为什么会发生这种情况以及我该如何解决?提前致谢;)

const testFunction = () => {

let name = undefined

User.find()
    .then(result => name = result[0].username)
    .catch(err => console.log(err))

return name }

【问题讨论】:

  • 您需要将testFunction 转换为async,然后您可以像这样awaitlet results = User.find()

标签: javascript mongoose promise


【解决方案1】:

将您的函数转换为async,然后您将能够await 猫鼬调用的结果。例如:

const testFunction = async () => {
  let name = undefined;
  let results = await User.find();

  if (results && results[0] && results[0].username) {
    name = results[0].username
  } else {
    // handle error
  }

  return name;
}

【讨论】:

  • 你好!谢谢你。感谢您的回答,我可以处理这个问题。但我有一些问题。为什么当我调用 testFunction() 时它会返回一个承诺?函数中的 if else 是什么?我意识到删除它们会返回一个未定义的名称,但是如果我在 if 语句之前 console.log(results) 已经有数据了。所以我看不出使用 if 语句的意义。再次感谢!
  • 我建议你阅读developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。当您将其标记为 async 时,它会返回一个承诺。 if/else 块是一个类型保护,因此您不要尝试访问 null 的 username 属性,这将引发异常。我把它放在那里只是为了安全。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2018-12-24
  • 2018-04-17
  • 2015-06-27
  • 2015-05-12
  • 1970-01-01
相关资源
最近更新 更多