flutter之Completer

使用场景举例:

客户端给服务端发送数据:

var data = await sendData(data);
Future<Uint8List> sendData(Uint8List data) 
{
    _connector.write(function, data);
}

_connector.write(function, data);方法已经将数据将发出去了,但是Future<Uint8List> sendData(Uint8List data) 这个方法还没有返回值,因为服务端还没有返回数据。我们可以先把这个异步方法挂着,先返回一个future,但是这个 future 是没有完成的,等到服务端返回数据时,再让他完成。这时候可以定义一个Completer,返回他的future:

var data = await sendData(data);
Completer _completer;
Future<Uint8List> sendData(Uint8List data) 
{
    _completer = Completer<Uint8List>();
    _connector.write(function, data);
    return _completer.future;
}

注意,这里就算返回了 _completer.future; ,前面的var data = await sendData(data);也不会继续执行,而是一直阻塞着,什么时候异步执行完了,var data = await sendData(data);这句才会执行完毕。

当监听到服务端的返回的消息时,将消息进行处理,然后执行:

  // responseData 是经过处理的服务端返回的消息,也就是客户端希望获取的数据
  _completer.complete(responseData);

这句代码执行后,Future<Uint8List> sendData(Uint8List data) 这个异步函数才算执行完成,相应的 var data = await sendData(data); 里的 var data 才会获取到数据。

参考:
Dart 关于Completer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值