const worker = require('worker-loader!./worker.js');
复制代码
this._locationsWorker = new worker();
此时新建了一个子线程;
复制代码
this._locationsWorker.postMessage({locations:location});
复制代码
( 注意:web worker 是能够发送网络请求的;)javascript
使用 onmessage 函数接收,代码以下:
let result = [];
onmessage = function(e){
let storeLocationUrl = e.data.storeInfoUrl;
result.push(e.data.locations);
if (result.length === 10 ){
request.post(storeLocationUrl,{
headers:{
projectId: '123456',
userId: e.data.user_id
},
json: result
}).then((res) => {
console.log(res);
})
result = [];
}
postMessage(result);
}
复制代码
此处的request 是在外部封装的,无需在乎;java
此处咱们能够用 postMessage( result )将咱们的结果抛出,而后在对应的文件中使用 onmessage再次接受。 例如:web
this._locationWorker.onmessage = ({ data }) => {
console.log(data); //此处的data就是咱们上面postmessage的数据。
};
复制代码
主线程能够监听子线程的是否发生错误,若是发生错误,会触发主线程的 error 事件;json
worker.onerror( function (event) {
console.log( event )
})
复制代码
主线程中使用:worker.terminate ();
子线程中使用:self.close ();
此处的self 就是指子线程自己;
复制代码
<script id = ' worker ' type = ' app/worker '>
addEventListener('message', function(){
......
},false)
</script>
复制代码
<script>
(function(){
var blob = new Blob([ document.querySelector(' #worker ').textContent ]);
var url = window.URL.createObjectURL( blob );
var worker = new Worker( url );
worker.addEventListener('message',function(){
postMessage('....');
},false)
worker.postMessage( ' ' );
})();
</script>
复制代码
以上的两个script 就是将主线程和子线程放在同页面中;网络
以上就是我目前了解的web worker的用法,至于service worker, 待我了解了在详细阐述,那是一个很高大上的东西。 以上全部的代码,都是我本身使用后,依照本身的看法写出来的,有错误的地方请指出。app