【问题标题】:Getting Promise pending on Firebase cloud functions在 Firebase 云功能上获得 Promise
【发布时间】:2019-02-22 18:11:33
【问题描述】:

我正在尝试从云函数内部的 firebase 数据库中检索价格节点,但是当我登录 getPrice() 函数时,它给了我 Promise is pending 警告。我在这里遗漏了什么?

get price Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }

这里是代码sn-p

const price = getPrice();
console.log(getPrice());

function getPrice() {
    return db
        .ref(`/locations/${id}/price`)
        .once('value')
        .then(snapshot => {
            console.log('snapshot: ', snapshot.val());
            return snapshot.val();
        });
}

编辑 在 promise 上调用 .then() 时收到此日志消息

console.log(getPrice().then(data => data))
get price Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }

【问题讨论】:

  • 您错过了 getPrice 返回承诺而不是实际数据的事实。但你似乎已经知道了。不知道这里还能说什么——你不能把一个异步函数变成一个异步函数。
  • @DougStevenson 但如何获取数据? console.log('snapshot:', snapshot.val());正在返回正确的值。
  • 在 promise 上使用 then() 方法。
  • @DougStevenson 仍然无法正常工作。检查编辑
  • 您正在记录数据快照。照此处理。 firebase.google.com/docs/reference/js/…

标签: firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

使用 async/await 解决了问题 Video on using async await in cloud functions

解决方案:

console.log('getDataFromNode', await getDataFromNode());

async function getDataFromNode() {
    const node = await db.ref(`/locations/${parkingId}/price
    const data = await node.once('value');
    return data.val();
}

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2018-11-29
    • 2018-05-09
    • 2019-08-08
    • 2017-12-19
    相关资源
    最近更新 更多