gpt4 book ai didi

dart - 显示angulardart进展的最佳实践是什么?

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

我试图展示angulardart的进展,并认为Future会对此有所帮助。但是后来我意识到,Future必须递归显示进度,因为Future会立即返回,然后执行冗长的操作。

如果我创建一个可以在满足最终条件之前调用自身的Future,则它将与进度条一起使用。但是我认为这不是一个很好的做法,因为这些调用每次递归都会增加堆栈上的内存。只需考虑一个遍历10亿个数据集的循环,该循环可能运行几个小时,每个循环都调用当前Future中的一个新Future。

是否有更好的方法来创建需要一定时间才能在每个元素上工作的循环(包括调用必须异步完成的网站并评估返回值)?在循环过程中,用户应看到一个进度,显示“x / 1000000完成”。

我认为必须使用Future来完成,因为UI需要在启动循环后重新加载,但是递归的Future对我来说似乎是个坏主意。

最佳答案

由于它是一个单线程平台,因此您需要将来立即在Web上返回给您。如果异步操作在完成之前没有返回,那么您将挂起浏览器,这对用户来说不是很好的体验。

相反,您有两种选择:

Dart能够使 future 看起来与await关键字同步。因此,您可以执行以下操作:

void performAction() async {
showProgress = true;
await expensiveRpc();
showProgress = false;
}

这将要求进度处于中间状态,因为您实际上并不会随着进度条的进行更新。就是说,如果您真的没有从RPC中获取进度事件,那么这可能是更好的解决方案。

现在,如果您的RPC或操作为您提供了一些反馈,那么您可以对流进行一些改进。
void performAction() {
showProgress = true;
expensiveRpc().listen((progress) {
if (progress.done) {
showProgress = false;
} else {
percentComplete = progress.value;
});
}

实际上,它更多地取决于您要与之交互的RPC或服务,而不是取决于如何更好地更新进度而不是进度本身。

关于dart - 显示angulardart进展的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52477901/

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