请阅读这个区块片段:
if (event is TapVariant) {
final bool isVariantCorrect = (correctVariantIndex == event.index);
if (isVariantCorrect) {
yield CorrectVariant();
} else {
yield IncorrectVariant();
Future.delayed(Duration(seconds: 1), () {
yield CorrectVariant();
});
}
}
Run Code Online (Sandbox Code Playgroud)
我需要从嵌套函数中产生 CorrectVariant。
我是这样解决的:
yield IncorrectVariant();
await Future.delayed(Duration(seconds: 1), () {});
yield CorrectVariant();
Run Code Online (Sandbox Code Playgroud)
但我很好奇。
您已经提出了最好的方法,原因如下:
当您在一个async*函数中时,您可以访问await关键字,它允许您在同一范围内处理未来的回调。
如果您yield在sync*函数中使用,则无论如何都不能等待回调,因为您没有运行异步代码。
当您处理Future's 时,您还可以在回调中返回您的值,如下所示:
yield 1;
// The following statement will yield "2" after one second.
yield await Future.delayed(Duration(seconds: 1), () {
return 2;
});
Run Code Online (Sandbox Code Playgroud)