gpt4 book ai didi

dart - 中断 Dart Futures 链的最佳方式?

转载 作者:行者123 更新时间:2023-12-03 02:54:07 25 4
gpt4 key购买 nike

如果你有一个像这样的 future 链(取自 Dart 教程)

expensiveA().then((aValue) => expensiveB()) 
.then((bValue) => expensiveC())
.then((cValue) => doSomethingWith(cValue));

取消这样一条链的正确“Dart”方式是什么?例如,这条长链可能已经在不久前开始,并且您希望在用户采取的操作导致最终结果无用时能够取消它。

可以使用 expenseAexpenseBexpenseCdoSomethingWith 代码检查变量值,并如果该值具有特定值,则抛出错误。

但是有没有通用的方法来杀死 future 链?

引用文献:

dart 教程给出了如何链接 future 的示例:https://www.dartlang.org/docs/tutorials/futures/#calling-multiple-funcs

有一个问题(恕我直言)部分回答了有关如何取消 future 的问题:is there any way to cancel a dart Future?

最佳答案

没有。没有办法取消这样的链条。

不过,有一些方法可以模拟可取消的 future :

var someBool;

cancelIfSomeBoolIsSet(fun(x)) {
return (x) {
if (someBool) return new Completer().future;
return fun(x);
};
}

expensiveA().then(cancelIfSomeBoolIsSet(expensiveB))
.then(cancelIfSomeBoolIsSet(expensiveC))
.then(doSomethingWithCValue);

一旦设置了 someBool, future 链就会被有效取消,因为完成者的 future 永远不会完成。

注意:cancelIfSomeBoolIsSet 在我的示例中采用一个参数函数(与第一篇文章中的 0 个参数函数相反)。调整代码很简单。

关于dart - 中断 Dart Futures 链的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com