0

我正在使用 webassembly 来获取 JSON 数据,并将其保存到 IndexedDB。我可以设法从 IndexedDB 中将它作为 Int8Array 获取,并将其转换为字符串,然后在它足够小时解析为 JSON,但是当数据太大时会出现错误:

Uncaught RangeError: Maximum call stack size exceeded

控制台日志截图:

安慰

负责的代码位:

function ConvertToJSON(result){
    console.log("= Converting to JSON =");
    console.log(result);
    let int8View = new Int8Array(result[0]);
    console.log(int8View);
    let str = String.fromCharCode.apply(String, int8View); //RangeError when array too large...
    let json = JSON.parse(str);
    console.log(json);
    AddJSONToPage(json);
}

有没有办法绕过这个问题?我是否需要将数组拼接成更小的位并转换,然后将其粘贴在一起,如果需要,我该怎么做?

4

1 回答 1

1

根据MDN,函数的硬编码限制为传递给函数的 65,536 个参数。由于您的 Int8Array 有超过 600,000 个元素,您的apply调用会由于提供的参数多 10 倍而终止。您可以按照您的说法将其拆分,但您也可以调用reduceInt8Array 并一次性完成所有操作:

int8View.reduce((arr, int8) => arr.concat( String.fromCharCode(int8) ), []);
于 2019-02-05T18:43:01.157 回答