Dart中return future与async return future行为差异:为何返回同对象却不等?
这是Dart的预期行为吗?
这完全是预期行为,核心差异来自普通函数和async函数的返回逻辑:
- 对于
sync函数:它只是直接返回传入的Future实例,没有任何额外包装。所以c == sync(c)是对同一个对象的比较,结果自然为true。 - 对于
async修饰的aSync函数:不管你在函数体内返回什么值(哪怕本身就是一个Future),Dart都会自动把这个返回值包装成一个全新的Future实例。也就是说,aSync(c)返回的不是你传入的c,而是一个新的Future——这个新Future会等待c完成后,将c的结果作为自己的结果,但它和c本身是完全不同的对象。因此c == aSync(c)比较的是两个不同的对象,结果为false。
本质上,async函数的特性就是“总是返回一个新的Future”,哪怕你返回的已经是Future,也会被再封装一层(Dart会自动扁平化这个嵌套,不影响异步流程,但对象身份会改变)。
内容的提问来源于stack exchange,提问作者BobLoblaw
相关产品推荐
相关产品推荐

