【发布时间】:2020-12-11 13:24:31
【问题描述】:
我正在尝试使用 fetch api 和可读流生成一个 excel 文件。我试图传递Uint8Array 我从reader.read() 获取并从中创建一个缓冲区对象并将其传递给我的可写流,但是当我将数组传递给Buffer.from 时,我得到了错误
The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object
下面是我的代码的相关部分。
我正在使用node.js 并且我在控制台中检查了typeof value 是Uint8Array
这里是页面
const page = await browser.newPage(); //puppeter
let fn = `writeToStream_${Date.now()}`;
await page.exposeFunction(fn, async (body, done) => {
let buffer = Buffer.from(body);
await writeStream.write(buffer);
});
const fetchDataResp = await page.evaluate(async (fn, fetchUrl) => {
const fetchPromise = fetch(fetchUrl);
const stream = await fetchPromise;
let reader = stream.body.getReader();
const decoder = new TextDecoder();
while(true) {
const {done, value} = await reader.read();
if (done){
break;
}
await window[fn](value, false);
}
await window[fn]("", true);
},fn,fetchUrl);
传递Uint8Array的正确方法是什么?
谢谢。
【问题讨论】:
-
page是什么,你用的是什么框架?你有没有调试过value到底是什么对象? -
@Bergi,我刚刚更新了这个问题。值为
Uint8Array对象,我正在使用node.js -
@opensource-developer 很明显,您使用 nodejs 从您使用的标签运行此代码,但
page(尤其是它的方法)是什么或它来自什么库仍然缺失.另外,您如何检查该对象的类型,以及您使用的是哪个控制台? -
@Bergi,我的错,再次更新了问题,希望现在有相关信息:P
-
啊,我怀疑是这样的。我很确定问题是您将在浏览器领域中创建的
Uint8Array传递给需要来自nodejs 领域的Uint8Array的函数。唯一我不太明白为什么它不能将其识别为类似数组的对象。
标签: javascript node.js puppeteer uint8array