我对飞镖和扑扑有点陌生。 我想知道如何同步运行 Future? 有可能吗?
不,这是不可能的。如果是,那么您将能够冻结 UI 线程,直到 Future 完成。
总的来说,答案是 NO
但是,有两点我想补充一下
dart:cli
库中使用 waitFor
关键字,但现在已被 flutter 团队删除。欲了解更多信息,请查看此已关闭 问题
此外,还有另一个开放问题请求此功能,但以不同的方式Issue您可以订阅它以获取将来的任何进一步更新。
SynchronousFuture
将期货作为同步处理。例如,当你有一些函数必须返回数据本地存储,但它有一个缓存层,如果你之前已经获取了该数据,那么它将存储在内存中
Future<String> getData(String key)async{
if(_cache[key] != null) return _cache[key];
return await _localStorage.load(key);
}
并像这样在 main 中获取数据
void main() async {
final output = await getData('myKey');
print(output);
}
但是而不是等待这两种情况(本地存储和缓存),而缓存就存在于内存中并且不需要等待它
我们可以使用
SynchronousFuture
来做类似的事情! 🎉
首先,删除
async
关键字并开始使用 SynchronousFuture
!
Future<String> getData(String key){
if(_cache[key] != null) return SynchronousFuture(_cache[key]);
return _localStorage.load(key);
}
接下来,以你见过的最奇怪的语法使用这个 Future 方法 😂 (但是相信我,它会起作用的😂🙏)!
void main() async {
String? output;
final myFuture = getData('myKey');
myFuture.then((data) => output = data);
// Yes I know we are trying to receive the data on then before awaiting to the future!
if(output != null)
print(output);
else
print(await myFuture);
}
这仅适用于
SynchronousFuture
,这使得事件循环在移至当前方法中的下一行之前运行 then
回调。