为什么这个函数没有返回true?
function test(str) {
window.setTimeout(function() {
if(str == 'ok') {
return true;
}
}, 1000);
}
console.log(test('ok'));
Run Code Online (Sandbox Code Playgroud)
这不是我想要做的.我有一个函数nammed test(),他在1秒后做了一些动作.我想在test()完成时执行下一个函数(所以在超时后).
我怎么知道测试结束的时候?
跟踪您的代码,这是发生的事情.
test() 被调用.setTimeout 计划在1000毫秒后调用的函数.test()结束执行,没有执行任何return语句,因此undefined返回.true任何值.换句话说,它只是不起作用.JS解释器不会暂停,它会在超时时间内继续.你不能在JS中暂停执行.
相反,您通常使用回调:
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);
});
Run Code Online (Sandbox Code Playgroud)
此代码将执行您似乎预期的更多操作.
它不会返回,true因为setTimeout调用是异步的.此外,true代码中的返回值来自内部函数.
处理此类程序流的常规方法是将回调传递给异步函数.
function test(str, callback) {
window.setTimeout(function() {
callback(str == 'ok');
}, 1000);
}
test('ok', function (result) {
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
作为第二个参数传递的函数test()将在setTimeout执行代码时被调用.回调函数的参数会告诉我们,如果str是有人ok与否.
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |