范围和异步功能

时间:2019-09-19 15:17:41

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

我正在尝试从某些Firebase存储对象中获取元数据,并将元数据转换为简单的对象列表。最终目标是按照列表中的对象上载的时间对其进行排序。

但是,我在使用异步功能及其范围方面遇到了麻烦。

该代码作为firebase函数执行,这是代码:

exports.listItems = functions.storage.object().onFinalize(async (object) => {

  const [files] = await storage.bucket(bucketName).getFiles();

  async function metadata(files) {

    let items = [];

    await files.forEach(async (file) => {

        const [metadata] = await storage
          .bucket(bucketName)
          .file(file.name)
          .getMetadata();

        let item_object = { name: metadata.name, updated: metadata.updated };

        console.log(item_object);

        items.push({ yup: 'yuppa' });
        items.push(item_object);
      });

    return items
  }

  let items = await metadata(files)


  items.push('test')
  console.log(items)
});

上面的代码将以下内容记录到控制台:

[ 'test' ]

Function execution took 501 ms, finished with status: 'ok'

{ name: 'public_wall/_2420565.jpg', updated: '2019-09-19T14:52:22.254Z' }

{ name: 'public_wall/_2420498.jpg', updated: '2019-09-19T14:39:22.278Z' }

因此,元数据功能内的代码仅在该功能的其余部分结束后才执行,因此不会附加到列表中。我该如何解决?

0 个答案:

没有答案