我正在使一个函数等待条件成立,然后再执行一个函数。输入的表达式为a ==5。a开头等于0,并且每次执行该函数时,它都会上升1。当它等于5时,该函数仍会得出false。
我的.js文件:
var _ = {
waitUntil: function(duringExecution, expression, onCompletion) {
test();
function test(){
console.log(a + ' ' + expression);
if((expression) == true) {
onCompletion();
} else {
duringExecution();
setTimeout(test, 200);
}
}
}
}
a = 0;
_.waitUntil(function() {
a++;
}, a == 5, function() {
console.log('yay');
});
我的HTML文件中没有任何内容,除了script标签。
<!DOCTYPE html>
<html>
<head>
<title>example lul</title>
</head>
<body>
<script src='under.js'></script>
</body>
</html>
每次运行该函数时,它都会打印a的值和表达式的结果。控制台仅打印:
1 false
2 false
3 false
4 false
5 false
6 false
7 false
...
它会永远持续下去。当a == 5时,它应该打印a true
并停止,但不是。
每当您编写一个表达式时,它总是被评估为其值。例如,当您传递a == 5
给函数时,它返回false
并false
传递给函数。
您需要包装a == 5
一个函数。并在需要检查状况时调用它。
var _ = {
waitUntil: function(duringExecution, expression, onCompletion) {
test();
function test(){
console.log(a + ' ' + expression());
if(expression() == true) {
onCompletion();
} else {
duringExecution();
setTimeout(test, 500);
}
}
}
}
a = 0;
_.waitUntil(function() {
a++;
},function(){
return a == 5
}, function() {
console.log('yay');
});
谢谢!这解决了我的问题,但是如果您不必这样做,那就太好了。有没有办法让_.waitUntil将== 5转换为函数?(我不知道我在说什么,所以如果我错了,请告诉我。)
@MarkC。这很奇怪。对我来说,它似乎工作正常。
@MarkC。抱歉,现在修复。我不见了
return
@DanielReynolds您将需要包装
a == 5
一个函数。如果您只想通过a == 5
并将其更改为在内部动态运行,_.waitUntil
则不可能。@MarkC。好。谢谢!