当前位置: 首页 > 知识库问答 >
问题:

Google Cloud Storage NodeJS getFilesStream异步

宰父飞白
2023-03-14

我有一个谷歌功能,永远不会返回;作为Google的一个功能,它只是达到了超时限制。它在60秒内局部工作良好。不知道问题是什么。代码如下:

/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */
const {Storage} = require('@google-cloud/storage');
exports.main = async (req, res) => {
  const storage = new Storage({projectId: 'our-project'});
  const store = storage.bucket('our-bucket');
    const incomplete = {
    LT04: [],
    LT05: [],
    LE07: [],
    LC08: []
  };

  store.getFilesStream({prefix : 'prefixToMatch', autoPaginate : true })
    .on('error', (err) => {
      return console.error(err.toString())
    })
    .on('data', (file) => {
      // Find small/bad files
      if (file.metadata.size === 162) {
        const split = file.name.split('/');
        const prefix = split[2].substr(0, 4);
        incomplete[prefix].push(file.name);
      }
    })
    .on('end', () => {
      return JSON.stringify(incomplete, false, '  ');
    });
};

共有1个答案

吕淮晨
2023-03-14

你的代码看起来还可以。但您需要考虑到有关这一点的一些附加细节。

你的云功能的内存够这个用吗?我认为您可以增加CF的内存分配。

您确定这是由于超时问题造成的吗?如果您还没有看到日志,可以转到错误报告部分。

如果您已经确认了这一点,另一个选项可以是更改超时持续时间。

 类似资料:
  • 异步操作在线程中执行,与主应用程序线程分开。当应用程序调用方法异步执行操作时,应用程序可以在异步方法执行其任务时继续执行。 示例 下面通过一个例子来理解这个概念。在示例程序中使用IO库接受用户输入。 是一种同步方法。它将阻止执行函数调用之后的所有指令,直到方法完成执行。 等待输入。它停止执行并且在收到用户输入之前不再执行任何操作。 以上示例将产生以下输出 - 在计算中,当某个事件在继续之前等待事件

  • 支持Python异步。包括对Core和ORM使用的支持,使用了异步兼容的方言。 1.4 新版功能. 注解 从SQLAlChemy 1.4.3开始的异步扩展现在可以被认为是 测试级 软件。API细节可能会更改,但是在这一点上,不太可能有重大的向后不兼容更改。 参见 对内核和ORM的异步IO支持 -初始功能发布 异步集成 -示例脚本演示了asyncio扩展中核心和ORM使用的工作示例。 Asyncio

  • 异常Exception 以传统的try,catch抓取异常 如果在业务层不catch,框架层会捕捉,并返回一个500的server error响应。 如果在开发环境会返回一个500的具体错误的trace响应。 try { throw new \Exception("Error Processing Request", 1); //yield throwExc

  • 问题内容: 同步和异步AJAX调用有什么区别?何时使用同步以及何时异步? 问题答案: 在最基本的级别上,当您希望调用在后台发生时,您可以使用异步模式,而当您希望代码等待直到调用完成时,则可以使用同步模式。 异步模式是AJAX调用的常用方法,因为通常在事件上附加一个回调函数,以便您可以在服务器端数据就绪时进行响应,而不必等待数据到达。

  • 问题内容: 什么是处理这种情况的最佳方法。我处于受控环境中,所以我不想崩溃。 从setTimeout内抛出时,我们将始终获得: 如果抛出发生在setTimeout之前,那么bluebirds catch将捕获它: 结果是: 很棒-但是如何在节点或浏览器中处理这种性质的恶意异步回调。 问题答案: 承诺不是域,它们不会捕获异步回调中的异常。你就是做不到。 然而诺言来捕捉从内抛出的异常/ / 构造函数的

  • 我对一个异步函数有点拘泥于此。 我要完成的是创建一个batchProcessing函数(batchGetSubs),它将循环访问一组文件,读取一个ID,然后发出一个API请求,等待一个响应(问题),然后用格式化的数据写入一个新文件。 问题--我尝试了异步和等待,以及推送承诺和尝试使用承诺.所有这些都是为了等待承诺的解决,但没有成功。当前的行为是,在API调用实际返回所有数据之前,我获取Promis

  • 异步Log日志 use AsyncLog; yield AsyncLog::info('hello world'); yield AsyncLog::debug('test debug', ['foo' => 'bar']); yield AsyncLog::notice('hello world',[], 'group.com'); yield Async

  • 我对异步方法有一个奇怪的问题。如果我以异步方式运行它并且它的作业抛出一些特定的异常,它不会显示它并简单地停止执行(没有捕获,没有日志)。 我发现它可以使用jasperreport。这是故障块代码: 如果此代码位于异步注释方法内,则不会引发异常,也不会记录(只是停止执行)。如果删除异步注释,它会抛出以下内容: 我的问题不是异常本身,而是为什么异步方法抓不到它?