我只想从setTimeout
中获得返回值,但得到的却是函数的整个文本格式?
function x () {
setTimeout(y = function () {
return 'done';
}, 1000);
return y;
}
console.log(x());
你需要用承诺来做这件事。它们在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)