【发布时间】:2015-07-21 10:00:10
【问题描述】:
我试图了解 Dart 如何执行异步调用。
给定以下代码:
main() {
test("test", () async{
await myCall( );
print( "done");
});
}
Future myCall( ) async{
["0","1","2"].forEach( (item) async{
print( "about to callback");
await futurePrint( item);
print( "done callback");
});
print( "done mycall");
return new Future.value();
}
Future futurePrint( String str){
print( "string = ${str}");
return new Future.value();
}
我希望输出是
about to future print
string = 0
done future print
about to future print
string = 1
done future print
about to future print
string = 2
done future print
done mycall
done
但代码实际输出的是
print( "done mycall");
about to future print
string = 0
about to future print
string = 1
about to future print
string = 2
done
done future print
done future print
done future print
为什么“done myCall”出现在打印的第一行,而不是最后一行? 为什么在“完成”打印之后会出现“完成的未来打印”?
如何让myCall 仅在数组迭代完成时返回?
【问题讨论】:
-
也可以使用
await Future.wait(["0", "1", "2"].map((..) async => ...))对每个元素进行异步操作,然后等待所有结果。
标签: dart dart-async