我有這樣的代碼:如何訪問setTimeout中的值?
function* showValue() {
setTimeout(function*() {
console.log('yielding')
return yield 100;
}, 1000);
}
var valFunc = showValue();
console.log(valFunc.next());
當我運行它,我看到這樣的輸出:
{ value: undefined, done: true }
爲什麼我應該做有.next()
調用返回100?
'setTimeout'是異步的,它完成在稍後的時間,因此你不能僅僅從它返回。在你的情況下,你可能需要一個回調或一個承諾,以知道計時器什麼時候完成它的事情。 – adeneo
沒錯,我可能還沒有理解發現者,但我一直在想,如果'showValue'得到暫停,從某個地方產生,即使在setTimeout內部,也會恢復執行。 – Geo
setTimeout將不會返回除id號之外的其他任何內容,但作爲setTimeout回調函數提供的匿名生成器函數將在時間到期時運行,並且它返回的生成器對象將丟失。您必須在setTimeout內捕獲它,然後相應地使用它。 – Redu