for/map循環裏面進行異步操做async/await後返回數據,for裏不能直接return執行方法函數

  • 直接用async/await 同步操做,就是for循環裏面必須等await返回後纔會執行第二次循環。與then不一樣的是,then()只有包裹在裏面的方法裏面纔是異步返回後執行的。因此for循環外層的return可能會在異步返回前執行了。

    async fn(arr){
        let arrItem =[]
        for(let i=0;i<arr.length;i+=1){
            const res = await request()
            arrItem.push(res.arrItem)
        }
        return arrItem
    }
    複製代碼

    調用fn()的時候可能會返回一個promise對象,因此還得:promise

    fn2(){
        fn().then(res=>{
        
        })
    }
    複製代碼
  • for循環裏直接return跳出執行方法函數

    若是你想在for/map循環裏面直接return方法函數的值,建議你仍是別找了。由於我是實在找不到。for原本就是一個方法,return只能返回他所在域的方法。因此仍是推薦使用上面的async/await。若是是知足條件後退出循環並返回,你能夠給個狀態bash

    fn(arr){
          let status =false
          let item =null
          arr.map(item=>{
              if(item.id===0){
                  item = item
                  status = true;
                  return false;
              }
          })
          if(status){
              return item;
          }else{
              return false;
          }
      }
    複製代碼
  • map裏使用async/await,個人使用方式是這樣的,測試return仍是在請求返回前執行了,不知爲什麼,大神能給個解釋嗎?以後解決的話會更新

    fn(arr){
        let arrItem =[]
        arr.map(async(item=>{
            const res = await request()
            arrItem.push(res.arrItem)
        })
        return arrItem
    }
    複製代碼
相關文章
相關標籤/搜索