【问题标题】:async/await func returning a promise instead of data [duplicate]异步/等待函数返回一个承诺而不是数据[重复]
【发布时间】:2018-06-24 05:39:19
【问题描述】:

我在 JS 中有以下函数,它应该读取 firebase 数据库中的所有条目。

async function getMarket() {

let marketRef = db.ref('/market');
let snapshot = await marketRef.once('value');
return snapshot.val();

}

由于某种原因,当我调用此函数时,它返回Promise { <state>: "pending" }。为什么会这样?

【问题讨论】:

  • 异步函数必须返回Promise,因为它们不能立即返回具体结果——这是异步计算的核心前提。
  • 听起来你的快照的价值是一个承诺,你也必须等待
  • @SterlingArcher async 函数总是返回 Promise,不管它们返回了什么。

标签: javascript firebase-realtime-database async-await


【解决方案1】:

async 函数返回Promise。链.then().catch()处理返回的Promise

【讨论】:

  • 这是使用async/await 语法,通常等待promise 时不需要使用then
  • @SterlingArcher OP 描述了调用该函数。 OP 似乎期望从函数返回一个不是 Promise 的值。 .then() 需要被链接起来处理函数返回的Promise
  • 对,如果它不是一个承诺,那很好,但是使用 async await 你不需要使用then 来提取值(我的游戏中的一个例子github.com/RUJodan/Source-React/blob/master/routes/login.js
  • @SterlingArcher 如果您想从@987654335 中提取值返回,您确实 需要.then(或另一个async 函数) @ 功能。这就是OP所要问的。在您链接到的文件中,所有函数都是async
  • @SterlingArcher 你读过真正的问题了吗:“由于某种原因,当我调用这个函数时它返回Promise { <state>: "pending" }。为什么会这样?”
猜你喜欢
  • 2018-08-01
  • 2017-12-07
  • 2018-02-03
  • 2018-12-22
相关资源
最近更新 更多