JavaScript----JS循環(huán)中使用async/await方法

async/awaitPromise的語法糖

Promise實現(xiàn)代碼:

function handleSqlByPromise(val) {
    return new Promise((resolve) => {
      setTimeout(() => {
        console.log(`${val} select`)
        resolve(val);
      }, 1000);
    })
  }
  [1,2,3].forEach(async index => {
    console.log('await before',index)
    const result = await handleSqlByPromise(index);
    console.log('await after',result )
  }),

async/await實現(xiàn)上面代碼:

async function handleSqlByAsync (val) {
      setTimeout(() => {
        console.log(`${val} select`)
        return val
      }, 1000);
  }
  
  [1,2,3].forEach(async index => {
    console.log('await before',index)
    const result = await handleSqlByAsync(index);
    console.log('await after',result )
  }),

Promise實現(xiàn)代碼的輸出為

await before 1
await before 2
await before 3
1 select
await after 1
2 select
await after 2
3 select
await after 3

async/await實現(xiàn)代碼的輸出:

await before 1
await before 2
await before 3
await after undefined
await after undefined
await after undefined
1 select
2 select
3 select

換成普通的 for...of 和 for 實現(xiàn)上面代碼:
for...of

  async function forFnForOf() {
    for(let index of [1,2,3]){
      console.log('await before',index)
      const result = await handleSqlByPromise(index);
      console.log('await after',result)
    }
  }
forFnForOf()

輸出

await before 1
1 select
await after 1
await before 2
2 select
await after 2
await before 3
3 select
await after 3

for

  async function forFn() {
    for(var index = 1;index<4;index++) {
      console.log('調(diào)用await之前',index)
      const result = await handleSqlByPromise(index);
      console.log('調(diào)用await之后',result)
    }
  }
  forFn()

輸出

調(diào)用await之前 1
1 select
調(diào)用await之后 1
調(diào)用await之前 2
2 select
調(diào)用await之后 2
調(diào)用await之前 3
3 select
調(diào)用await之后 3

執(zhí)行后的效果就是我們的預(yù)期效果。


試著使用for和for...of調(diào)用handleSqlByAsync
for...of

async function forFnletof() {
    for(let index of [1,2,3]){
      console.log('await before',index)
      const result = await handleSqlByAsync(index);
      console.log('await after',result)
    }
  }

輸出:

await before 1
await after undefined
await before 2
await after undefined
await before 3
await after undefined
1 select
2 select
3 select

for

 async function forFn() {
    for(var index = 1;index<4;index++) {
      console.log('調(diào)用await之前',index)
      const result = await handleSqlByAsync(index);
      console.log('調(diào)用await之后',result)
    }
  }
  forFn()

輸出

調(diào)用await之前 1
調(diào)用await之后 undefined
調(diào)用await之前 2
調(diào)用await之后 undefined
調(diào)用await之前 3
調(diào)用await之后 undefined
1 select
2 select
3 select
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容