我只想从中获取返回值,setTimeout
但我得到的是函数的整个文本格式?
function x () {
setTimeout(y = function () {
return 'done';
}, 1000);
return y;
}
console.log(x());
我只想从中获取返回值,setTimeout
但我得到的是函数的整个文本格式?
function x () {
setTimeout(y = function () {
return 'done';
}, 1000);
return y;
}
console.log(x());
为此,您需要使用 Promise。它们在 ES6中可用,但可以很容易地填充:
function x() {
var promise = new Promise(function(resolve, reject) {
window.setTimeout(function() {
resolve('done!');
});
});
return promise;
}
x().then(function(done) {
console.log(done); // --> 'done!'
});
在 ES2017 中使用async
/await
在async
函数内部会变得更好:
async function() {
const result = await x();
console.log(result); // --> 'done!';
}
您无法从传递给 的函数中获得返回值setTimeout
。
调用setTimeout
(x
在您的示例中)的函数将在您传递给的函数setTimeout
甚至被调用之前完成执行并返回。
无论您想对获得的值做什么,都需要从传递给setTimeout
.
在您的示例中,这将写为:
function x () {
setTimeout(function () {
console.log("done");
}, 1000);
}
x();
最好对函数x
以及在超时后要执行的任何任务进行回调,然后在该回调中发送。
function x (callback) {
setTimeout(function () {
callback("done");
}, 1000);
}
x(console.log.bind(console)); //this is special case of console.log
x(alert)
您可以像下面的示例一样使用 Promise 和 setTimeOut 的组合
let f1 = function(){
return new Promise(async function(res,err){
let x=0;
let p = new Promise(function(res,err){
setTimeout(function(){
x= 1;
res(x);
},2000)
})
p.then(function(x){
console.log(x);
res(x);
})
});
}
我想你想要知道事件发生与否的标志。setTimeout 不返回值。您可以使用变量来检测事件是否发生
var y="notdone";
setTimeout(function () {
y="done";
}, 1000);
您可以在超时发生后访问变量 y 以了解完成与否