Angular 5 即使我使用 setTimeout 也不会在长时间操作期间检测到变化

Angular 5 doesn't detect change during a long operation even if I use setTimeout

我正在尝试在我的应用从 csv 文件加载数据时显示 ngx-bootstrap 进度条。

问题: ui 被冻结,直到整个操作结束

我用setTimeout拆分加载,递归调用。我还尝试调用 ngZone.run() 和 applicationRef.tick() 以及 changeDetectorRef.markForCheck() ...没有任何成功,进度条只在操作结束时显示完整。

我做了一个更简单的 stackblitz,所以你们可以告诉我如何实现它。它在我的代码中更简单 bcs 我把它放在一个服务中,我通过一个 observable 得到结果。但如果这至少有效,我会知道我做错了什么。 https://stackblitz.com/edit/angular-gzdylf

在您使用 setTimeout 拆分工作的示例中:

setTimeout(work());

这意味着您在循环内调用 work 函数,而不是稍后将其调度到 运行。

您需要更改它以将函数引用传递给 setTimeout 以使其按预期工作:

setTimeout(work);   // NOTE: `work` and not `work()`