javascript - 如何将 setTimeout 编写为仅运行一次作为 javascript 中的承诺
问题描述
我有几个用户界面,可以同时运行不同的异步进程。当其中一些完成时,他们需要执行诸如刷新部分或全部 UI 之类的操作。为了避免多次运行刷新,我使用 setTimeout 函数运行刷新,因此即使从多个同时进程“触发”它也只运行一次。例如:
var runCleanupTimeout;
function runCleanupOnce() {
if (runCleanupTimeout) clearTimeout(runCleanupTimeout);
runCleanupTimeout = setTimeout(function () {
refreshUI();
}, 250);
}
我知道我也可以将回调传递给它,并将实际超时作为变量传递给函数,但我开始在稍后完成的函数中使用 Promises,我想知道如何实现诸如抽象承诺之类的东西。目前我正在使用单个计时器(因此静态值和函数调用 - 我很少在单个 UI 中需要多个这些值,但是当我这样做时,我会创建第二个变量和具有固定超时的第二个函数)
我希望能够编写一个通用的实用程序函数作为一个承诺,所以任何时候我想做一个只运行一次,我只是调用类似的东西:
utilities.runOnce('someTimerId',250).then(
function() {
refreshUI();
}
);
我知道我可以改用数组/关联数组,在其中为“计时器”指定 id 并使用自定义回调类型结构。但我不完全确定这将如何在 promise.then() 结构中工作。我看到了一个使用 .bind 属性的示例,但在这种情况下找不到关于 bind() 正在做什么的好的参考。
感谢任何帮助解决这个问题。
解决方案
事实证明,Promise 不是一个好的解决方案,因为一次性运行类型的流程只有一个谨慎的解决方案
推荐阅读
- javascript - 从 file:// 运行 Svelte 应用程序,无需服务器
- python - 具有多个 StyledItemDelegateForColumn 的 QAbstractTableModel 和 QTableView 使我的应用程序崩溃
- algorithm - 如何找到边权重总和最大的最小路径?
- python - 如何从文本文件中随机隐藏单词
- r - 使用 R 中 2 个不同数据帧的列变量进行 T 测试
- angular - 如何在带有关键帧的动画项目中正确创建和构造?
- c++-cli - 如何在遍历GetProcessByName时使用for循环而不是foreach循环
- javascript - HTTP 请求完成并在 Angular 中渲染后调用 JS 函数
- r - R逻辑问题:较长的对象长度不是较短对象长度的倍数( dplyr::if_else() )
- javascript - 如何为 REACT INFINITE 中的每个页面仅发出一次 API 请求滚动此处