前几天做一个功能,需要在异步回调未完成时候进行等待;也就是说同步执行N个异步方法. 总是在第一个异步未执行完成时候剧执行了第二个异步方法,效果很不理想.有什么方法可以实现这样的功能呢?
大体的思路:给每个异步加上等待;如下:
//将订单信息存储
item.forEach((key, value) {
setAtPageData(key, value);
});
//监听回调
await registerPayListen(context);
_timerCancel();
但是registerPayListen方法怎么才能在我不想要结束时候等待呢?
此处我是采用定时器去监听某一个bool当为真时候则结束异步;如下:
registerPayListen<T>(BuildContext context) async {
var completer = Completer();
Future zyn = completer.future;
//微信支付回调失败 则执行此
_countdownTimer = Timer.periodic(new Duration(seconds: 1), (timer) {
if (wxPayFinish) {
completer.complete();
}
});
await zyn.whenComplete(() => print('完成'));
}
只有在 completer.complete();执行时候才会回调异步方法并进行回调
网友评论