gpt4 book ai didi

for-loop - 在 Dart 中是否允许在 for 循环内等待?

转载 作者:行者123 更新时间:2023-12-04 09:58:14 24 4
gpt4 key购买 nike

我有一个如下所示的程序:

main() async {
ooClass = new OoClass(1);
int val = await function1();
print(val);
ooClass = new OoClass(2);
val = await function1();
print(val);
ooClass = new OoClass(3);
val = await function1();
print(val);

}

OoClass ooClass;

Future<int> function1() async {
List list3 = await function2();
return list3.indexOf('Ok');
}


Future<List<String>> function2() async {

List<String> list1 = new List<String>();

function3(Map<String, int> map1) async {
String string1 = '';
bool bool1 = false;
List<String> list2 = [];
String string2;

function4(String string3) async {
if (ooClass.function7(string3)) return;
if (ooClass.function8() && !bool1) {
bool1 = true;
return;
}
string2 = await function5(string3);
list2.add(string2);
}

for (String key in map1.keys) {
await function4(key);
}
string1 = list2.join(', ');
list1.add(string1);
}

for (Map<String, int> idxList in ooClass.function6()) {
await function3(idxList);
}
return list1;
}

function5(String s1) {
return new Future.value('Ok');
}

class OoClass {

List<Map<String, int>> map2;
bool bool3 = false;

OoClass(int type) {
switch(type) {
case 1:
map2 = [{'Ok':1}];
break;
case 2:
map2 = [{'id': 1, 'Ok':1}];
break;
case 3:
map2 = [{'foo': 1, 'Ok':1}];
bool3 = true;
break;
}
}

List<Map<String, int>> function6() {
return map2;
}

bool function7(String string9) {
if (string9 == 'id') return true;
return false;
}

bool function8() {
return bool3;
}
}

这个片段完美地工作。

在我的真实环境中,当 await function4(key);被调用,function2 返回 list1 列表(空)。函数 4 调用稍后执行,但函数 2 的结果丢失。

我真的不明白这种行为。这可能是一个错误或等待内部 for 循环不被使用?
如果不应该在 for 循环中使用 await 我怎么能以另一种方式实现它?

我正在使用 dart 1.22.0-dev.4,但我也尝试过使用较旧(且稳定)的版本,结果相同。

我终于得到了问题,它不依赖于 awaitfor环形。相反,这是我的代码中的一个错误。

最佳答案

是的,await允许在 for 内在 Dart 中循环,它将按预期工作。

for (var o in objects) {
await doSomething(o);
}

甚至还有 await for对于 Streams,如果这就是您要查找的内容:
await for (var event in eventStream) {
print("Event received: $event");
}

您的例子 works correctly在 DartPad 中。调试起来太复杂和抽象,但至少从表面上看,它应该可以工作。不过,您说该代码段在您的“真实环境”中不起作用。如果您解释一下您的意思,也许我们可以提供帮助?

附加提示: take full advantage of static analysis ,尤其是 await_only_futuresunawaited_futures短绒规则。这可以帮助您捕获许多错误。

关于for-loop - 在 Dart 中是否允许在 for 循环内等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41375905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com