gpt4 book ai didi

javascript - 在worker中使用_config.worker = false调用Papa.parse调用postMessage

转载 作者:行者123 更新时间:2023-12-02 20:54:49 24 4
gpt4 key购买 nike

我在我自己的工作线程中调用 Papa.parse ,并且在 _config.worker 中设置为 false。当进程完成时,它仍然调用 postMessage ,这会触发一条消息发送给我自己的工作人员。不应该this

if (IS_PAPA_WORKER)
{
global.postMessage({
results: results,
workerId: Papa.WORKER_ID,
finished: finishedIncludingPreview
});
}

还应该检查config.worker是否设置为true,然后只调用global.postMessage我不想将结果发送到主线程,知道如何实现它吗?

最佳答案

他们确实define IS_PAPA_WORKER

var IS_WORKER = !global.document && !!global.postMessage,
IS_PAPA_WORKER = IS_WORKER && /blob:/i.test((global.location || {}).protocol);

这意味着他们会检查是否有 document 属性、postMessage 属性,以及当前领域是否已从 blob 加载: URI。

针对您的情况,最好的解决方案可能是不从 blob: URI 加载脚本,而是使用专用脚本文件。

const worker = new Worker( '/a_real_file.js' );

这里是一个使用 data: URI 的演示,因为 StackSnippets 不允许存储文件,但不要自己使用 data: URI,它只是为了演示协议(protocol)的重要性:

const worker_script = document.querySelector( '[type="worker-script"]' ).textContent;
const worker_url = 'data:text/javascript,' + encodeURIComponent( worker_script );
const worker = new Worker( worker_url );
worker.onmessage = ({data}) => console.log( data );
worker.onerror = console.error;
<script type="worker-script">
importScripts( 'https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.1.0/papaparse.min.js' );

const csv = `col1,col2,col3
a,1,z
b,2,y
c,3,x`;
Papa.parse( csv, { header: true } );
postMessage( 'worker done' );
</script>

现在,如果您绝对需要使用 blob: URI,最简单的解决方案是在导入库之前将 document 定义为真实的全局属性:

const worker_script = document.querySelector('[type="worker-script"]').textContent;
const worker_url = URL.createObjectURL( new Blob( [ worker_script ], { type: 'text/javascript' } ) );
const worker = new Worker( worker_url );
worker.onmessage = ({data}) => console.log( data );
<script type="worker-script">
self.document = {};
importScripts( 'https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.1.0/papaparse.min.js' );

const csv = `col1,col2,col3
a,1,z
b,2,y
c,3,x`;
Papa.parse( csv, { header: true } );
postMessage( 'worker done' );
</script>

关于javascript - 在worker中使用_config.worker = false调用Papa.parse调用postMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61513192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com