In JavaScript, does using await inside a loop block the loop?

前端 未结 8 2524
南旧
南旧 2020-12-02 06:38

Take the following loop:

for(var i=0; i<100; ++i){
    let result = await some_slow_async_function();
    do_something_with_result();
}
8条回答
  •  抹茶落季
    2020-12-02 06:53

    No Event loop isn't blocked, see example below

    function sayHelloAfterSomeTime (ms) {
      return new Promise((resolve, reject) => {
        if (typeof ms !== 'number') return reject('ms must be a number')
        setTimeout(() => { 
          console.log('Hello after '+ ms / 1000 + ' second(s)')
          resolve()  
        }, ms)
      })
    }
    
    async function awaitGo (ms) {
       await sayHelloAfterSomeTime(ms).catch(e => console.log(e))
       console.log('after awaiting for saying Hello, i can do another things  ...')
    }
    
    function notAwaitGo (ms) {
    	sayHelloAfterSomeTime(ms).catch(e => console.log(e))
        console.log('i dont wait for saying Hello ...')
    }
    
    awaitGo(1000)
    notAwaitGo(1000)
    console.log('coucou i am event loop and i am not blocked ...')

提交回复
热议问题