Javascript 返回true和setimout
为什么此函数不返回Javascript 返回true和setimout,javascript,Javascript,为什么此函数不返回true function test(str) { window.setTimeout(function() { if(str == 'ok') { return true; } }, 1000); } console.log(test('ok')); 那不是我想做的。 我有一个函数nammed test(),它在1秒后执行一些操作。 我想在test()完成时执行下一个函数(所以在超时之后) 如何知道
true
function test(str) {
window.setTimeout(function() {
if(str == 'ok') {
return true;
}
}, 1000);
}
console.log(test('ok'));
那不是我想做的。 我有一个函数nammed test(),它在1秒后执行一些操作。 我想在test()完成时执行下一个函数(所以在超时之后)
如何知道测试何时完成?它不会返回
true
,因为setTimeout
调用是异步的。此外,代码中的返回值true
来自内部函数
处理此类程序流的正常方法是将回调传递给异步函数
函数测试(str,回调){
setTimeout(函数(){
回调(str='ok');
}, 1000);
}
测试('ok',功能(结果){
控制台日志(结果);
});
当
setTimeout
执行代码时,将调用作为第二个参数传递给test()
的函数。回调函数的参数将告诉您str
是否为ok
。对于初学者,settimeout是一个异步方法,因此实际的函数test()将在settimeout代码运行之前完成并返回
然而,第二,您只是从settimeout函数返回true,而不是从test函数返回true,因此除了false之外,您永远不会得到任何结果。跟踪您的代码,下面是发生的情况
test()
setTimeout
计划在1000毫秒后调用函数test()
结束执行,没有执行return
语句,因此返回undefined
true
返回为空相反,您通常使用回调:
function test(str, callback) {
window.setTimeout(function() {
if (str === 'ok') {
callback(true);
}
}, 1000);
}
// logs 'true' 1000 ms later
test('ok', function(result) {
console.log(result);
});
// logs nothing, callback never fires
test('NOTOK!', function(result) {
console.log(result);
});
此代码将完成您似乎期望的更多操作。它不会返回true,因为异步函数setTimeout()将在1000毫秒后执行,console.log将以正常方式执行,而无需等待“测试”函数。这样调用setTimeout的目的是什么?我想执行一些操作,过一段时间,我想知道这个函数什么时候完成你走错了方向。Cos set timeout将在不同的范围内调用函数。我可以知道在setTimeout函数完成后,您是否有任何函数要调用,我可以帮助您。测试在setTimeout执行之前很久就完成了。要知道某件事情何时完成,请按照答案中的描述使用回调。那么如何操作,以
返回true
或返回false
?我想知道这个函数什么时候完成:)@dragon75:我想这取决于你想做什么。目前我认为还不清楚该函数使用的是什么setTimeout
。如果您只是想让测试函数返回true,那么就去掉超时代码。您知道函数已经完成,因为回调正在执行!因此,在回调中放入您需要遵循的任何代码。callback
匿名函数的参数将参数隐藏到您实际需要的test
函数。@dragon75:setTimeout(function(){callback(str='ok');},1000)