【发布时间】:2017-11-16 05:25:25
【问题描述】:
如果我们需要在某些情况下推迟回调并稍后在事件发生时调用它,您有什么建议? 目前有几个排队模块,但我没有找到一个符合这个要求的。我的意思是在完成之前不要将任务排在队列之外。当有合适的参数值或回调时运行它们。例如,
<html>
<body>
<input type="text" id="id1">
<input type="text" id="id2">
<script type="text/javascript">
document.getElementById("id1")
.addEventListener("keydown", function (e) {
if (e.keyCode === 13) {
upper(e.target.value);
}
});
document.getElementById("id2")
.addEventListener("keydown", function (e) {
if (e.keyCode === 13) {
delayed(e.target.value);
}
});
function upper(x){
if (parseInt(x) == x) {
next_level(x, function(y){
alert(y);
});
} else {
alert('not int');
}
}
function next_level(x, callback){
y = Math.random() * 10;
if (y < x){
callback(y);
} else {
// postpone callback till y comes from id2
// put it into a queue
}
}
function delayed(y){
// take 1st element/callback from the queue
// call it with y
// if queue is empty, do nothing
}
</script>
</body>
</html>
【问题讨论】:
-
你能解释一下这对你意味着什么:“当有合适的参数值时”?另一种情况会是什么。什么是“不合适”的值?以及如何检查差异?
-
if (y < x)在这种情况下我们立即调用回调,否则我们正在等待事件(值将来自其他来源)。好吧,在真实情况下当然y不是随机数,有一种复杂的方法可以得到它,但是对于演示采用随机 y 并将其与x进行比较应该没问题
标签: javascript callback queue