异步中.then()的坑爹

main先执行,Microtask队列执行,队列空,event队列执行,延时最后执行。
await可以变异步为同步,但是需要一层一层递进。
回调可以同步,但是需要暴露回调口。

项目中没用到Microtask,和provider,估计是研发不喜欢用或者他不会用。建议灵活使用。
————————————————
版权声明:本文为CSDN博主「花生-炎天」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/whs867712232/article/details/108217283

结论

同步函数内要小心使用异步函数
不要 var result=asyncFunction(); result=<Future>
除非 var result=await asyncFunction();

如果使用async/await又会导致所有嵌套函数都得写async/await
使用.then()时要及时return,避免写超过2层的.then

async:返回Future
async*:返回流

实验

void main(){
  asy()async{
    return true;
  }

  no(){
    var a=asy();
    print('no_a:$a');
  }

  yes(){
    asy().then((value) {
      var a=value;
      print('yes_a:$a');
      return a;
    });
  }

  yes2()async{
    var a=await asy();
    print('yes2_a:$a');
  }
  
  print('result0:${no()}');
  print('result1:${yes()}');
  print('result2:${yes2()}');
}

结果:
no_a:Instance of 'Future'
result0:null
result1:null
result2:Instance of 'Future'
yes_a:true
yes2_a:true

posted @ 2023-10-08 16:08  Nolca  阅读(35)  评论(0编辑  收藏  举报