JSジェネレーターを使用して、setTimeout
のコールバックで値を生成します。
function* sleep() {
// Using yield here is OK
// yield 5;
setTimeout(function() {
// Using yield here will throw error
yield 5;
}, 5000);
}
// sync
const sleepTime = sleep().next()
ジェネレーターのコールバック内で値を生成できないのはなぜですか?
_function*
_ 宣言は同期的です。新しいPromise
オブジェクトを生成し、.then()
を.next().value
にチェーンして、解決されたPromise
値を取得できます。
_function* sleep() {
yield new Promise(resolve => {
setTimeout(() => {
resolve(5);
}, 5000);
})
}
// sync
const sleepTime = sleep().next().value
.then(n => console(n))
.catch(e => console.error(e));
_