如何将 setTimeout 写入 运行-only-once 作为 javascript 中的承诺
How to write setTimeout to run-only-once as a promise in javascript
我有几个用户界面,其中可以同时 运行 宁不同的异步进程。当他们中的一些完成时,他们需要做一些事情,比如刷新 UI 的部分或全部。为避免需要多次 运行 刷新,我使用 setTimeout 函数来 运行 刷新,因此即使 'triggered' 来自多个并发进程,它也只会 运行 一次。例如:
var runCleanupTimeout;
function runCleanupOnce() {
if (runCleanupTimeout) clearTimeout(runCleanupTimeout);
runCleanupTimeout = setTimeout(function () {
refreshUI();
}, 250);
}
我知道我也可以将回调传递给它,并将实际超时作为变量传递给函数,但我开始在稍后完成的函数中使用 Promises 并且我'我想知道如何实现抽象承诺这样的东西。
目前我使用的是单个计时器(因此静态值和函数调用——我很少在单个 UI 中需要多个计时器,但是当我这样做时,我创建了第二个变量和第二个函数固定超时)
我希望能够编写一个通用的实用函数作为承诺,所以任何时候我想做一个 运行-only-once,我只是调用类似的东西:
utilities.runOnce('someTimerId',250).then(
function() {
refreshUI();
}
);
我知道我可以改用 array/associative 数组,我在其中指定 'timer' 的 ID 并使用自定义回调类型结构。但我不完全确定这在 promise.then() 结构中如何工作。我看到一个使用 .bind 属性 的示例,但找不到关于 bind() 在这种情况下所做的事情的良好参考。
感谢任何解决此问题的帮助。
承诺并不是一个好的解决方案,因为 运行-once 类型的过程只有一个谨慎的解决方案
我有几个用户界面,其中可以同时 运行 宁不同的异步进程。当他们中的一些完成时,他们需要做一些事情,比如刷新 UI 的部分或全部。为避免需要多次 运行 刷新,我使用 setTimeout 函数来 运行 刷新,因此即使 'triggered' 来自多个并发进程,它也只会 运行 一次。例如:
var runCleanupTimeout;
function runCleanupOnce() {
if (runCleanupTimeout) clearTimeout(runCleanupTimeout);
runCleanupTimeout = setTimeout(function () {
refreshUI();
}, 250);
}
我知道我也可以将回调传递给它,并将实际超时作为变量传递给函数,但我开始在稍后完成的函数中使用 Promises 并且我'我想知道如何实现抽象承诺这样的东西。 目前我使用的是单个计时器(因此静态值和函数调用——我很少在单个 UI 中需要多个计时器,但是当我这样做时,我创建了第二个变量和第二个函数固定超时)
我希望能够编写一个通用的实用函数作为承诺,所以任何时候我想做一个 运行-only-once,我只是调用类似的东西:
utilities.runOnce('someTimerId',250).then(
function() {
refreshUI();
}
);
我知道我可以改用 array/associative 数组,我在其中指定 'timer' 的 ID 并使用自定义回调类型结构。但我不完全确定这在 promise.then() 结构中如何工作。我看到一个使用 .bind 属性 的示例,但找不到关于 bind() 在这种情况下所做的事情的良好参考。
感谢任何解决此问题的帮助。
承诺并不是一个好的解决方案,因为 运行-once 类型的过程只有一个谨慎的解决方案