關(guān)于 Flutter for循環(huán)中使用await無效的問題

之前也碰到過,在Flutter中for循環(huán)中用wait并不生效,外層并不會等待所有for循環(huán)中wait事件,貌似找到過方案,后面也沒記錄,時間久了又忘了,這次記錄下。給你,給我留下印記~

一、錯誤示范

一開始我用的items.forEach來進行for循環(huán),并在里面使用wait關(guān)鍵值阻塞,外部調(diào)用也是用了wait關(guān)鍵字,但是外部的wait并不起作用,不會等待里面for循環(huán)wait全部執(zhí)行完再做操作。
如下代碼

  void onUploadImages() async {
    await onStoreAndUploadImages();
    NavigatorUtil.pop(context,true);
  }
  
  Future<void> onStoreAndUploadImages() async {
    List<int> items = _itemRotateQuarterTurns.keys.toList();
    //并不會等待所有的子項都執(zhí)行完
    items.forEach((element) async { 
      await generateAndStoreImage(element);
    });
  }

二、正確示范

后面將forEach改為for循環(huán)就解決了,置于為什么還沒去查證,后期有時間將會查證下,更新在本文中~

  Future<void> onStoreAndUploadImages() async {
    List<int> items = _itemRotateQuarterTurns.keys.toList();
    for(int i = 0; i < items.length; i++){
      await generateAndStoreImage(i);
    }
  }

三、Why

因為增強寫法forEach里面是個方法調(diào)用,所以他不是立刻生效的,而普通寫法就是在本方法里面

void forEach(void action(K key, V value));

我們可以看到forEach的參數(shù)其實是個方法,所以在這個action()方法里await應(yīng)該是沒有用的

最后編輯于
?著作權(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)容