【发布时间】:2021-08-15 01:30:19
【问题描述】:
Dart 是否有方法等待函数返回真/假,然后调用它之后的下一个函数?
我在这里看到过类似的问题,但我似乎无法让它们以某种方式工作以实现我的目标。 一些答案使用明确的延迟时间(例如等待 3 秒)。但这不适用于我的方法。
例如
print('START');
await fetchResults();
print('COMPLETE'); // This is not called until the fetchResults returns true/false
注意:我尝试过类似的方法:
Future<bool> fetchResults() {
await Future.doWhile(() => return true);
}
但这会使我的函数陷入无限循环。
【问题讨论】:
-
Future.doWhile做你想做的事,但是你的尝试进入了一个无限循环,因为你传递了一个总是返回true的函数。使用await Future.doWhile(fetchResults);等到fetchResults()返回false,或使用await Future.doWhile(() async => !await fetchResults());等到它返回true。 -
谢谢,我看看我做错了什么。
-
@jamesdlin 我的函数使用一个
EventChannel来监听变化(第三方包)。它是使用诸如showScanner()之类的函数调用的,但这不会给出回调,因此我无法执行then()。所以我必须想办法改变我的方法。我假设使用Future await,但这不起作用(这就是我得到无限循环的原因。 -
我不明白。 1. 回调与
.then无关。要使用.then,它必须返回一个Future。 2.await是.then的语法糖。 3. 正如我所说,你得到一个无限循环,因为你使用了Future.doWhile和一个总是返回true的函数。如果您展示的代码可以重现您尝试解决的问题,这可能会有所帮助。 -
非常感谢您的澄清,经过研究,我的问题似乎与
EventChannel有关。这是我必须处理事件的地方,毕竟wait函数不是必需的。
标签: flutter dart asynchronous async-await future