在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ asyncawit 配合permise實(shí)現(xiàn)異步出了問(wèn)題?

asyncawit 配合permise實(shí)現(xiàn)異步出了問(wèn)題?

methods: {
    getData() {
      if(!this.token) {
        console.log('token is null')
        return
      }
      let tokenBody = {
        "Content-Type": "application/json",
      }
      let itemsArr = []
      this.bymbolArr.forEach(async item => {
        console.log(item)
        let tokenBody = {
          'Content-Type': 'application/json',
        }
        let data = await post(Config.getSharesUrl, tokenBody);
        if (data.RetrieveItem_Response_3) {
          let dataArr = data.RetrieveItem_Response_3.ItemResponse[0].Item[0].Fields.Field;
          if(dataArr.length > 0) {
            var obj = {}
            let arr = dataArr.forEach( item => {
              if(item.Double) {
                obj[item.Name] = item.Double
              }
            })
          }
        }
        let itemObj = {}
        itemObj[item] = obj
        console.log('itemibj='itemObj)
        itemsArr.push(itemObj)
      })
      console.log('itemsArr=' + itemsArr)
      this.items = itemsArr
    }

await 后邊的post是自己用permise封裝的ajax,配合async和await使用,結(jié)果先顯示itemsArr= 空,再顯示itemibj=的每項(xiàng),是什么原因造成的?

回答
編輯回答
離觴

不要在async await的時(shí)候有forEach或者其他封裝的方法
可以用原始的for循環(huán)或for of
或者類(lèi)似于這樣的封裝

let each = async (arr,fn) => {
  for(var i=0;i<arr.length;i++){
    await fn(arr[i],i);
  }
}

async getData(){
  let itemsArr = [];
    await each([1, 2, 3], async item => {
        var data = await post(item);
        itemsArr.push(data);
    });
    console.log(itemsArr)
}
2017年12月20日 23:41
編輯回答
薄荷糖

因?yàn)橥鈱雍瘮?shù)不是異步,你仔細(xì)體會(huì)一下。

2017年6月2日 22:34
編輯回答
荒城

首先沒(méi)理解你描述的問(wèn)題哈,不過(guò)看了下代碼,forEach中使用async/await,相當(dāng)于每個(gè)await是獨(dú)立在不同的async function中的,所以相互不會(huì)等待。你可以async getData()然后使用for循環(huán)代替forEach。

2018年9月16日 16:43