は、私は次のようなプログラムを持っている:Dartで内部ループを待っていますか?
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;
}
}
このコードは完璧に動作します。
私の実際の環境では、代わりに、function4(キー)を待っています。 function2はlist1 List(空)を返します。 Function4呼び出しは後で実行されますが、function2の結果は失われます。
私はこの動作を実際に理解していません。それはバグかもしれないし、ループが使用されないために内部を待っていますか? forループをforループ内で使用しないでください。どうすれば別の方法で実装できますか?
私はダーツ1.22.0-dev.4を使用していますが、古いバージョン(安定版)でも試してみましたが、同じ結果が出ました。
私は最終的に問題を持って、それがfor
ループでawait
には依存しませんでした。代わりに私のコードに誤りがありました。
'for'の' await'は問題ありません。コード例が複雑すぎるため、さらに調査する必要があります。 –
'for'の' await'がうまくいることを知りたい –