flutter - 是否可以像在 JS 中那样在 dart(Flutter) 中实现 Future<>s 模式?
问题描述
我需要使用飞镖的期货(或其他)做这样的事情:
function Obj(){
let resolver;
this.promise = new Promise((resolve, reject) => {
resolver = resolve;
});
//await firebase initialization or something
setTimeout(() => {
resolver('foo');
}, 2000);
return this;
}
var object = Obj();
(async () => {
var result = await object.promise;
console.log(result);
})();
这里发生了什么,我有一个对象存储在单例中的某处(在 JS 示例中它是一个object<Obj>
),该对象在开始时在某处初始化,在下一行,还有另一个对象已初始化(在 JS 中类比它的async()
功能)。这个异步函数正在等待object<Obj>
初始化它的数据,比如“foo”或者其他。
在 JS 中,这种设置是可能的,因为 Promises 为您提供resolve
了可以在任何地方使用的 ing 函数的引用。但是看着 Dart 的Future
我找不到类似的东西,这很奇怪。
TL;博士:
我的目标是让第一个对象在其构造函数中异步初始化一些数据,然后以某种方式通知对该对象的所有其他引用数据已被初始化。
解决方案
到目前为止,使用 dart 中的 Futures 是不可能做到这一点的。
但是:我过于复杂了,只需使用全局状态控制器即可。每当接收到数据时,状态就会更新,更新后的状态很容易在引用该状态的其他对象中跟踪(通常使用流)。
推荐阅读
- javascript - 在 QuerySelector 中仅使用单引号
- c# - 关于将 DataTable 转换为 JSON 的问题
- python - 删除在 python GUI 树视图中选择的行,然后将其从 sqlite3 数据库中删除
- sql - 您如何确定 A 列是否包含 B 列中的某些内容?
- mysql - Mysql子查询或更好的东西
- selenium - selenium framework-popup-xpath 存储库问题
- python - 将列表转换为列表元组
- macos - 将 .terminal 文件的十六进制颜色值转换为 base64
- android - 无法从共享的 firebase 动态链接获取 'deepLink.getQueryParameter("...")'
- html - 为什么第一行元素在 flexbox 中表现不同?