flutter 中的Future方法读取踩的小坑

27 篇文章 0 订阅

flutter dart 语法中 Future其实和js中的Promse 原理是一样的  Future 声明的函数都是异步函数  

void testThen1() {
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);

  f1.then((_) => print("f1 -> f1"));
  // f2 then 异步回调里面还有异步回调
  f2.then((_) {
    print("f2 -> f2");
    f1.then((_) => print("f2.then -> f1"));
  });
  f3.then((_) => print("f3 -> f3"));
}

//打印结果
f1 -> f1
f2 -> f2
f2.then -> f1
f3 -> f3

当遇到Future声明的函数时候 想要获取其return 返回值  必须也用异步的方法 否则只能读取外层的Future

Future<bool> demo() async{
    await return true;
}

//用异步的方法读取
demoRead() async{
 await demo();//打印true
}

//或者用then 的方法去接受 获取
demo.then((e) {
    print("e");
    
  });

 dart 的语法还是多看看官方的解释

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用`std::future`来获取线程池任务的返回值。在`enqueue`函数,任务被包装在`std::packaged_task`,这个包装器可以将一个函数包装成一个可调用对象,并且可以使用`std::future`来获取函数的返回值。 在`enqueue`函数,我们使用`std::make_shared`创建了一个`std::packaged_task`,并将要执行的任务`f`和其参数`args`绑定在一起。然后,我们将这个`std::packaged_task`封装在一个`std::shared_ptr`,以便可以在其他线程访问它。 接下来,我们使用`std::future`获取`std::packaged_task`的返回值。`std::future`是一个异步结果的占位符,可以用来检查任务是否已经完成,并且可以获取任务的返回值。 具体地,我们可以在调用`enqueue`函数后,使用返回的`std::future`对象的`get()`函数来获取任务的返回值。`get()`函数会阻塞当前线程,直到任务执行完毕并返回结果。 例如,假设我们要执行一个函数`int add(int x, int y)`,我们可以使用以下方式来获取其结果: ```c++ ThreadPool pool(4); // 创建线程池,有4个线程 // 将任务加入线程池,并获取返回值的future对象 auto result = pool.enqueue(add, 3, 4); // 等待任务执行完成,并获取返回值 int res = result.get(); std::cout << "3 + 4 = " << res << std::endl; ``` 这里的`result.get()`会阻塞当前线程,直到任务执行完毕并返回结果。最后,我们将`res`输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值