簡體   English   中英

將 uint8array 傳遞給 function

[英]Passing uint8array to function

我正在嘗試使用獲取 api 和可讀流來生成 excel 文件。 我正在嘗試傳遞從Uint8Array reader.read()獲取的 Uint8Array 並從中創建緩沖區 object 並將其傳遞給我的可寫 stream,但是當我將數組傳遞給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 valueUint8Array

這里的頁面是

    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.evaluate()中所述:

如果傳遞給 page.evaluate 的page.evaluate返回不可序列化的值,則page.evaluate解析為undefined DevTools 協議還支持傳輸一些不能被JSON序列化的附加值: -0NaNInfinity-Infinity和 bigint 文字。

鍵入 arrays 似乎序列化為對象:

 console.log(JSON.stringify(new Uint8Array([11, 12, 13]))); // {"0":11,"1":12,"2":13}

您可以嘗試將輸入的 arrays 轉換為常見的 arrays ,然后重新轉換它們:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch();

try {
  const [page] = await browser.pages();

  await page.goto('https://example.org/');

  const data = await page.evaluate(() => {
    return Array.from(new Uint8Array([11, 12, 13]));
  });
  console.log(new Uint8Array(data));
} catch(err) { console.error(err); } finally { await browser.close(); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM