2016-12-26 2 views
3

benutze ich JS Generator einen Wert in einem Rückruf von setTimeout zu ergeben:JS: Wie Generator und Ertrag in einem Rückruf verwenden

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() 

Warum kann ich nicht Werte ergeben in einem Rückruf in dem Generator?

Antwort

3

function* Deklaration ist synchron. Sie können ein neues Promise Objekt, Ketten .then() zu .next().value ergeben Promise Wert

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)); 
gelöst retrieve
Verwandte Themen