首页 > 试题广场 >

设任务列表有三个异步的任务,即 `taskList =...

[单选题]
设任务列表有三个异步的任务,即 `taskList = [taskA, taskB, taskC]`,想使用 `async/await` 配合 `forEach` 实现串行执行,以下哪个代码是可行的?
  • async function run () {

    taskList.forEach(async (task) => await task())

    }

    run()
  • async function run () {

    taskList.forEach((task) => await task())

    }

    run()
  • function run () {

    List.forEach(async (task) => await task())

    }

    run()
  • 其余都不对
var taskList = [
    async function(){
        return new Promise((resolve,reject)=>{
         	setTimeout(()=>{
                resolve('1s')
            },1000)
        })
    },
    async function(){
        return new Promise((resolve,reject)=>{
         	setTimeout(()=>{
                resolve('0.5s')
            },500)
        })
    },
    async function(){
        return new Promise((resolve,reject)=>{
         	setTimeout(()=>{
                resolve('2s')
            },2000)
        })
    },
]

function run_wrong(list){
    list.forEach(async task=>{
        let res = await task()
        console.log(res)
    })
}

async function run(list){
    for(let i=0;i<list.length;i++){
        let res = await list[i]()
        console.log(res)
    }
}

async function run2(list){
    for(let task of list){
        let res = await task()
        console.log(res)
    }
}

run_wrong(taskList) //0.5s 1s 2s
run(taskList) //1s 0.5s 2s
run2(taskList) //1s 0.5s 2s
核心:
forEach 不会按顺序执行 而是并发执行异步任务
for of 和 普通的for循环却能顺序执行异步任务
发表于 2022-04-19 11:40:50 回复(0)

forEach又不是async函数,它本身不支持异步功能,这里forEach函数的结果是获得一堆Promise实例对象,我们需要的是把这堆Promise实例对象串起来。(没太理解题目的意思)

发表于 2021-09-06 21:08:41 回复(0)
C遍历的是List不是taskList
发表于 2021-09-24 09:44:52 回复(0)
forEach 没办法实现,用map吧
发表于 2021-08-10 17:21:26 回复(0)
草,这是考眼力啊:
C应该写成:
{
  taskList = [taskA, taskB, taskC]
  function run () {

taskList.forEach(async (task) => await task())

}

run()
  function taskA(){
    setTimeout(()=>{
      console.log('A')
    },1000)
  }
   function taskB(){
    setTimeout(()=>{
      console.log('B')
    },1400)
  }
   function taskC(){
    setTimeout(()=>{
      console.log('C')
    },1030)
  }
}


发表于 2021-06-23 11:13:09 回复(1)