node.js - NodeJS 流(管道)数据到 Gcloud 存储
问题描述
我正在将结果从 API 流式传输到 gcloud。
它看起来像这样。
import {pipeline} from 'stream/promises';
import {Storage} from '@google-cloud/storage';
import {getData} from './data';
import {transformData} from './transform';
const datasets = await getDatasets()
for (const dataset of datasets) {
await pipeline(
getData({
data:dataset
}),
transformData(),
GCStream(dataset)
)
}
getData
export function getData(opts:any) {
return {
[Symbol.asyncIterator]() {
return{
async next() {
try {
const res = await axios.get(
'endpoint'
)
const data = res.data.result
if (!data.length) return {done: true}
return {done: false, value: data}
} catch (err) {
console.log(err);
}
await delay(10)
}
throw new Error(`Failed to fetch.`)
}
}
}
}
}
来自 API 请求的 Promise 的异步迭代器。由于某种原因,它只返回第一个结果。
transformData
Returnsstream.Transform
是一个非异步转换流,它从 API 请求迭代器中提取数据并对其进行按摩。
GCStream
看起来像这样,我认为这也是一个问题。
const GCStream = (name:string) => {
const file = destinationBucket.file(name);
async function streamFileUpload(stream:any) {
stream.pipe(file.createWriteStream()).on('finish', () => {
console.log('uploaded')
});
}
return streamFileUpload;
}
它只是从 api 流中获得第一个结果,而且它只是停滞不前……从不创建上传。我在处理管道文档时遇到了困难,希望有人能在这里发现明显的错误。
解决方案
推荐阅读
- sql - 使用随机重复键值创建和删除模式违反唯一约束“pg_type_typname_nsp_index”
- javascript - Chrome 扩展后台脚本获取请求可以阻止客户端吗?
- php - 当网站在其他设备上正常工作时,我在浏览器上收到“ERR_SSL_UNRECOGNIZED_NAME_ALER”的原因可能是什么?
- flutter - 如何在 Flutter 中使用 Google ML KIT 开发多检测器?
- javascript - 使用 Image URL 训练 Tensorflowjs 程序
- css - grid-row: 1 是做什么的?
- python - 谷歌字典结果抓取
- python - 返回字符串和布尔值的递归函数
- powershell - PowerShell New-ADUser 仍然创建禁用用户
- swift - 即使用户未登录,应用程序也不显示登录页面