强制等待返回镖中的值



我知道这是一个101的问题,但它完全违背了我的直觉,所以我需要问一下。

假设我做了一个方法:

String read(String key) => return storage.read(key);

现在这不起作用,因为storage.read是一个异步函数。没有问题:

String read(String key) => return await storage.read(key);

现在,我认为这意味着,等待这个Future完成,然后返回结果String。但这不好,因为一旦我使用wait,我也需要使我的函数async

String read(String key) async => return await storage.read(key);

好的,但这不起作用,因为async函数,显然根据定义,返回Future(或void(。

Future<String> read(String key) async => return await storage.read(key);

我们开始了。此函数有效。

所以,如果我在调用堆栈中的某个地方使用async函数,那么它上面的所有东西都必须是async函数,并返回Future,是吗?

这违背我直觉的原因是,我想,为什么不让我控制说,";当您使用这个函数时,(在调用堆栈中(将future解析为它的实际值并返回该值"这似乎是不允许的。相反,我们必须将选择权交给调用者自己来解决未来问题。

我是不是遗漏了什么?

现在,我想我从来没有使用过它们,但我听说过Completers。Completer的目的是允许您显式解析Future,从而可以返回值而不是Future<value>吗?

不能强制异步代码神奇地同步。您需要在返回树上一直适应这种情况。这就是像FutureBuilder这样的东西为您所做的:提供一个小部件树,以便在传输真实数据时显示。

最新更新