主线程调用多个worker并返回Promise,然后用Promise.all同步处理结果,但是和预期不一样,Promise.all没有回调
const app = getApp()
Page({
data: {
},
async onLoad() {
let ps=[]
const worker = wx.createWorker('workers/worker.js') // 文件名指定 worker 的入口文件路径,绝对路径
for (let i = 0; i < 2; i++) {
let p=new Promise((resolve,reject) => {
worker.postMessage('counting '+i)
worker.onMessage(res => {
console.log('main thread|'+res);
resolve(res)
})
worker.onProcessKilled(error => {
reject(error)
})
})
ps.push(p)/**/
// 不使用worker是可以回调Promise.all的
// ps.push(new Promise(resolve => setTimeout(resolve,100)))
}
let ress=await Promise.all(ps)
console.log({ress})
},
})
只能创建一个worker子线程,那多线程的意义又在哪了?我有一个并行计算的优化需求。只有一个线程,提升的效率似乎并不高呢。各位有没有其他方案呢?
问题找到了,哥给你优化下代码吧
const ps = [...new Array(2)].map((_,i) => ( new Promise((resolve,reject) => { worker.postMessage('counting '+i) worker.onMessage(res => resolve(res)) worker.onProcessKilled(error => reject(error)) }) )) const ress=await Promise.all(ps) console.log({ress})
走catch了