使用下划线_.delay,我如何停止未来的执行并提供用户状态
Using underscore _.delay, how do I stop future execution and provide user status
我需要缓慢地处理一个输入数组,在不达到服务器速率限制的情况下对每个元素进行asych调用。我可以用下划线_.delay()
做我想做的大部分事情,但我如何(a)在用户决定保释的情况下取消延迟执行,以及(b)显示包括数组当前索引的状态。
以下是我迄今为止所拥有的。。。
function processArray(array) {
var processElement = function(element) {
return doAsynch(element); // asynch task returning a promise
};
_.each(array, function(element, index) {
_.delay(processElement, index * 1000, element);
});
}
function userDecidesToCancel() {
// stuck here
}
如果用户决定取消,比如说在我们到达元素N之前,我很乐意让doAsynch(N-1)
完成,但我不想开始做任何进一步的工作(对于N>=1)。有办法吗?
此外,关于状态,我不知道如何优雅地表示我们完成了总项目N,即我想说。。。
_.each(array, function(element, index) {
_.delay(processElement, index * 1000, element).then(function(result) {
// how can I get the result here? I'd like to log status
console.log("just did " + index + " " + result);
});
});
我可以将该日志消息的一部分放在processElement
函数中(记录结果的部分),但我也需要相对于数组长度的索引,以便显示进度百分比。我认为该索引的知识正确地属于_.each
循环,而不是传递给processElement
函数。
提前谢谢。
Undercores的_.delay函数只是包装了原始的setTimeout
。因此,您可以收集所有超时,然后使用clearTimeout
:取消它们
var cancels = _.map(array, function(element, index) {
return _.delay(processElement, index * 1000, element);
});
function cancel() {
// you can also track the current element from processElement and cancel
// only the timeouts that follow that one, but it might be an overkill.
_.each(cancels, function(cancel) {
clearTimeout(cancel);
});
}
不幸的是,在当前的实现中,我看不到从processElement
获得承诺的方法。
相关文章:
- 如何根据各种复选框状态执行操作
- 使用下划线_.delay,我如何停止未来的执行并提供用户状态
- 如何在jQuery函数执行's处于活动状态
- 推特状态/销毁未在摩卡/柴中执行
- jqTree 在 IE11 中不执行保存状态工作正常 FF12.
- 执行服务呼叫时的状态代码 12004
- AngularJS:使用 ngResource 执行 GET 请求时的状态代码 0
- 如何捕获页面上的所有请求和响应,并根据每个响应状态的需要执行操作
- 尝试执行 a:active 以保持打开状态,直到单击其他链接
- 我应该在执行推送状态时更新所有 href 和 src 吗?
- 从一种特定状态转换到另一种特定状态时执行操作
- 如何对 Flux 存储中的状态变量强制执行隐私
- AJAX onreadystatechange在状态更改后执行
- jQuery在Bootstrap切换按钮类处于活动状态时执行某些操作
- 执行onclick回调后;选中'状态被重置
- 每当我执行推送状态时,状态更改就会启动
- Firefox插件只在调试状态下执行
- 超时后在无状态组件中执行函数
- WshShell运行不等待,但执行状态更新(运行vs执行问题)
- Apps Script -更新用户的代码执行状态