【发布时间】:2021-12-23 15:38:11
【问题描述】:
我最近正在尝试做这样的事情,
注意:专注于打印语句。
List shipped = [], pending = [], completed = [], returned = [];
List<OrderModel> mainOrdersList = [];
@override
void initState() {
super.initState();
getData();
}
Future getData() async {
var results = await DatabaseHandler().fetchOrders("merchantId");
results.docs.forEach((f) async {
var products = await DatabaseHandler().fetchOrderedProducts(f.id);
var productData = products.data();
//add to mainOrdersList
print("mainOrderList Length - ${mainOrdersList.length}");
});
//THE BELOW STATEMENT IS BEING EXCECUTED BEFORE THE COMPLETION OF THE FOR LOOP GIVEN ABOVE
segregate();
setState(() {});
}
void segregate() {
print("segregating");
for (int i = 0; i < mainOrdersList.length; i++) {
mainOrdersList[i].productList.forEach((element) {
//segregate on the basis of status like pending, shipped, completed, returned
});
}
}
使用 FOREACH 输出 -
segregating
mainOrdersList Length - 10
即使我在 forEach 中使用await,仍然首先执行 forEach 下面的语句。但是,如果我使用简单的 for 循环,则不会发生这种情况,并且代码可以正常运行。
将forEach 替换为for,
for (int i = 0; i < results.docs.length; i++) {
var f = results.docs[i].data();
var products = await DatabaseHandler().fetchOrderedProducts(f.id);
var productData = products.data();
//add to mainOrdersList
print("mainOrderList Length - ${mainOrdersList.length}");
}
简单的输出 -
mainOrdersList Length - 10
segregating
我还观察到forEach 比for 快一点。
【问题讨论】:
-
我认为这是对您的问题的最佳解释。 stackoverflow.com/questions/63719374/…
-
但是我观察到一件事,当我使用 forEach 时,列表的更新速度非常快,但现在使用正常的 for 循环后,这个过程变慢了。