优化代码逻辑或使用更高效的异步处理方式。以下是几种具体的
该方法会接收一个Promise数组,并返回一个promise对象,其中包含了所有的Promise的状态(如fulfilled或rejected)和相应的值或原因。
示例代码:
const asyncFunction1 = async () => {
return new Promise(resolve => setTimeout(() => resolve('asyncFunction1'), 1000))
}
const asyncFunction2 = async () => {
return new Promise(resolve => setTimeout(() => resolve('asyncFunction2'), 2000))
}
const asyncFunction3 = async () => {
return new Promise((resolve, reject) => setTimeout(() => reject('asyncFunction3'), 3000))
}
const main = async () => {
const results = await Promise.allSettled([asyncFunction1(), asyncFunction2(), asyncFunction3()])
results.forEach(result => {
if(result.status === 'fulfilled') {
console.log(result.value)
} else {
console.error(result.reason)
}
})
}
main()
设置一个超时时间,并在该时间到达时抛出一个异常。
示例代码:
const asyncFunction = async () => {
return new Promise(resolve => setTimeout(() => resolve('asyncFunction'), 5000))
}
const timeoutFunction = (ms, promise) => {
const timeoutPromise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('time out'))
}, ms)
})
return Promise.race([promise, timeoutPromise])
}
const main = async () => {
try {
const result = await timeoutFunction(3000, asyncFunction())
console.log(result)
} catch (err) {
console.error(err.message)
}
}
main()
将任务放到另一个线程中执行,主线程继续执行其他任务。
示例代码:
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads')
const asyncFunction = () => {
return new Promise(resolve => setTimeout(() => resolve('asyncFunction'), 1000))
}
if(isMainThread) {
const worker = new Worker(__filename, {
workerData: null
})
worker.on('message', message => {
console.log(message)
})
} else {
asyncFunction().then(result => {
parentPort.postMessage(result)
})
}
这是父线程,可以看到我们开启了另外一个线程,另外一个线程会执行asyncFunction函数,并在完成后向父线程发送消息。