我只想從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