Firebase Cloud Functions-如何在导出中等待功能?

时间:2019-04-28 03:48:26

标签: javascript firebase async-await google-cloud-firestore google-cloud-functions

使用Firebase Cloud Functions我正在尝试扩展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));
  });

我希望ExpandedLink返回扩展的链接。输入到文档中的是[object Promise]

1 个答案:

答案 0 :(得分:0)

因为expandedLink的值为Promise,所以您得到“ [object Promise]”。

您实际想要的值为unshortenedUrl。您只能在该值存在的then()内部访问该值,因此您需要返回tall Promise,并将其他return语句存储在then()中。

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

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));

  });