无需获取结果,如何知晓BigQuery作业已完成?
问题描述
我正在使用BigQuery的Node.js SDK,创建查询作业将查询结果插入到表中,希望知晓作业何时完成。文档中提到可通过await job.getQueryResults()实现,但由于结果数据量可能很大且我无需这些结果,不想将其加载到内存。虽发现该方法可设置maxResults为0,但这种方式不够优雅。我目前想到的实现方式如下:
new Promise((resolve, reject) => { job.on('complete', (metadata) => { resolve(metadata); }); job.on('error', (err) => { reject(err); }); });
请问是否有更优的原生Promise方式,无需自行构建Promise来实现该需求?
解决方案
BigQuery Node.js SDK的Job对象自带原生的promise()方法,完全可以替代手动封装的Promise逻辑,更简洁且贴合SDK原生设计。
直接使用示例:
try { const jobMetadata = await job.promise(); // 作业完成后执行后续逻辑,jobMetadata包含作业的元数据信息 } catch (error) { console.error('作业执行失败:', error); }
这个方法内部已经封装了对complete和error事件的监听逻辑:作业成功完成时会resolve返回作业元数据,执行出错时则reject抛出错误,和你手动实现的逻辑效果完全一致,但无需自己构建Promise,代码更简洁优雅。
如果不需要作业元数据,也可以简化为:
await job.promise(); // 作业完成后直接执行后续操作
内容的提问来源于stack exchange,提问作者bygrace
相关产品推荐
相关产品推荐

