async/await、setTimeout和promise占用时间过长
创始人
2024-09-21 02:00:14
0

优化代码逻辑或使用更高效的异步处理方式。以下是几种具体的

  1. 使用Promise.allSettled()方法

该方法会接收一个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()
  1. 使用async/await并设置超时时间

设置一个超时时间,并在该时间到达时抛出一个异常。

示例代码:

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()
  1. 使用worker_threads模块开启另外一个线程

将任务放到另一个线程中执行,主线程继续执行其他任务。

示例代码:

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函数,并在完成后向父线程发送消息。

相关内容

热门资讯

透视玄学!来玩app破解,cl... 透视玄学!来玩app破解,cloudpoker外挂,高科技教程(有挂揭秘)1、cloudpoker外...
透视美元局!拱趴大菠萝机器人,... 透视美元局!拱趴大菠萝机器人,果然真的是有挂(透视)AI教程(有挂脚本)一、拱趴大菠萝机器人AI软件...
透视教学!大菠萝789辅助器下... 透视教学!大菠萝789辅助器下载,约局吧德州真的存在透视吗,辅助教程(有挂介绍)1、起透看视 约局吧...
透视系统!wepoker辅助器... 透视系统!wepoker辅助器安装包,原来是真的有挂(透视)新2025版(有挂工具)1、wepoke...
透视透视!菠萝德州透视脚本,c... 透视透视!菠萝德州透视脚本,cloudpoker怎么开挂,揭秘攻略(有挂黑科技)1、菠萝德州透视脚本...
透视了解!约局吧德州可以透视吗... 透视了解!约局吧德州可以透视吗,一直存在有挂(透视)微扑克教程(有挂揭秘);1、约局吧德州可以透视吗...
透视挂透视!佛手在线大菠萝技巧... 透视挂透视!佛手在线大菠萝技巧,德州局透视,微扑克教程(有挂辅助)1、佛手在线大菠萝技巧ai机器人多...
透视挂透视!德州私人局脚本,起... 透视挂透视!德州私人局脚本,起初存在有挂(透视)软件教程(有挂详情)1、这是跨平台的德州私人局脚本黑...
透视最新!impoker辅助,... 透视最新!impoker辅助,pokemmo脚本,技巧教程(有挂解说);1、打开软件启动之后找到中间...
透视好牌!wepoker有透视... 透视好牌!wepoker有透视功能吗,一贯有挂(透视)细节方法(有挂规律)1、每一步都需要思考,不同...