我只想从setTimeout获取返回值,但我得到的是函数的整个文本格式?从setTimeout获取返回值
function x() {
setTimeout(y = function() {
return 'done';
}, 1000);
return y;
}
console.log(x());
我只想从setTimeout获取返回值,但我得到的是函数的整个文本格式?从setTimeout获取返回值
function x() {
setTimeout(y = function() {
return 'done';
}, 1000);
return y;
}
console.log(x());
您需要为此使用Promises。他们是available in ES6,但可以polyfilled quite easily:
function x() {
var promise = new Promise(function(resolve, reject) {
window.setTimeout(function() {
resolve('done!');
});
});
return promise;
}
x().then(function(done) {
console.log(done); // --> 'done!'
});
实际上,在我的示例中'done'是一个承诺,需要在setTimeout内部返回。因为我无法获取setTimeout中返回的deferred.resolve()。它会怎样?谢谢 – Vainglory07
你可以在问题中发布一个更清晰的代码示例吗? –
您无法从传递给setTimeout
的函数中获得返回值。
在您传递给setTimeout
的函数被调用之前,调用setTimeout
(在您的示例中为x
)的函数将完成执行并返回。
无论你想要用你得到的价值来做什么,你都需要从你传递给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)
我想你想有标志,以了解事件发生或没有。 setTimeout不会返回一个值。你可以使用一个变量来检测事件发生或没有
var y="notdone";
setTimeout(function() {
y="done";
}, 1000);
后发生超时就知道做或不该
你的语法是这样的,它只会返回功能,您可以访问变量y。 – Mritunjay
你想“完成”被退回吗?你如何返回函数的结果,这将在1000毫秒后被调用? –
超时是异步的,所以你不能从它们返回。 (好吧,你可以,但返回值是无处可去的) – Ferdi265