鑒于我有以下資料:
var uniqueIds = [1, 2, 3, 4];
我想根據上面的輸入按順序執行異步請求:
List<Future<void>> futures = uniqueIds.map((e) {
return APIService.shared
.networkingRequest(input: e)
.then((value) => update())
.onError((error, stackTrace) => {
handleError(error)});
}).toList();
我想futures.waitInOrder(...)
用whenComplete
處理程式觸發類似的東西。
uj5u.com熱心網友回復:
最簡單的方法是在方法await
內的 for 回圈中使用async
。這將等待每個未來完成,然后再繼續下一個:
Future<void> foo(List<int> uniqueIds) async {
List<Future<void>> futures = uniqueIds.map((e) {
return APIService.shared
.networkingRequest(input: e)
.then((value) => update())
.onError((error, stackTrace) => {
handleError(error)});
}).toList();
for (final future in futures) {
final result = await future;
}
// Do something after all futures have completed.
}
另一種選擇是使用Future.forEach -此函式將 Iterable 映射到輸出型別,如果輸出型別為 a Future
,則期貨將一個接一個地運行,并且計算結果將被丟棄:
Future.forEach(
uniqueIds,
(e) {
return APIService.shared
.networkingRequest(input: e)
.then((value) => update())
.onError((error, stackTrace) => {
handleError(error)});
}
).whenComplete((nullValue) {
// Do something after all futures have completed.
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529305.html
標籤:扑镖异步