Firebase云功能 - 如何在导出期间等待功能?

问题描述 投票:0回答:1

使用Firebase云功能我正在尝试扩展firestore文档中的uri并将其替换为扩展的uri。

我正在使用运行良好的高npm包(https://www.npmjs.com/package/tall),我只是无法将生成的扩展uri放入我的对象中以放回到firestore中。

我相信它在我的其余功能完成之前没有返回,因此没有给我数据。当我尝试在页面上使用异步的示例并使用await firebase时会出错。

我假设我错过了一些非常简单的东西,但经过一整天的上传到云功能,测试和再次尝试,我感到非常沮丧。

我错过了什么?

exports.addonSanitized = functions.firestore
  .document('addons/{addonId}')
  .onCreate(doc => {
    const addonId = doc.id;
    const addon = doc.data();

    const expandedLink = tall(addon.link)
      .then(unshortenedUrl => console.log('Tall url', unshortenedUrl))
      .catch(err => console.error('AAAW 👻', err));

    const sanitized = {
      summary: `${expandedLink}`
    };

    return admin
      .firestore()
      .collection('addons')
      .doc(addonId)
      .update(sanitized)
      .then(doc => console.log('Entry Sanitized', doc));
  });

我希望扩展的链接返回扩展的链接。正在输入文件的是[对象承诺]

javascript firebase async-await google-cloud-firestore google-cloud-functions
1个回答
0
投票

你得到“[对象承诺]”,因为expandedLink的价值是Promise

你真正想要的价值是unshortenedUrl。您只能在then()中存在该值,因此您需要返回tall Promise,并在then()中包含其他return语句。

可能是这样的(未经测试):

exports.addonSanitized = functions.firestore
  .document('addons/{addonId}')
  .onCreate(doc => {
    const addonId = doc.id;
    const addon = doc.data();

    return tall(addon.link)
      .then(unshortenedUrl => {
        console.log('Tall url', unshortenedUrl)
        const sanitized = {
          summary: `${unshortenedUrl}`
        };
        return admin
          .firestore()
          .collection('addons')
          .doc(addonId)
          .update(sanitized)
          .then(doc => console.log('Entry Sanitized', doc));
      })
      .catch(err => console.error('AAAW 👻', err));

  });
© www.soinside.com 2019 - 2024. All rights reserved.