2016-05-20 2 views
0

ich folgende Versprechen Generatoren von hereWenn Ausbeute Array mit Promise.reject, ich Erfolg Antwort bekam

folgen Sie bitte Code

function async(makeGenerator){ 
    return function() { 
    var generator = makeGenerator.apply(this, arguments); 

    function handle(result){ 
     // result => { done: [Boolean], value: [Object] } 
     if (result.done) return Promise.resolve(result.value); 

     return Promise.resolve(result.value).then(function (res){ 
     return handle(generator.next(res)); 
     }, function (err){ 
     return handle(generator.throw(err)); 
     }); 
    } 

    try { 
     return handle(generator.next()); 
    } catch (ex) { 
     return Promise.reject(ex); 
    } 
    } 
} 

async(function*(){ 
    yield [Promise.reject('Promise error')] 
})() 
.then(function(){ 
    console.log('success') 
}) 
.catch(function(data){ 
console.log('error',data) 
}) 

Sein Ausgang success ist, statt error

Wenn ich yield Promise.reject('Promise error') mache, dann wird .catch wie erwartet aufgerufen.

Was ich tun muss, damit ich Versprechen Ablehnung mit

yield [Promise.reject('Promise error')]

+1

Sie haben ein Array gefunden, der Inhalt des Arrays wird nicht überprüft, und ein Array wird nur als normaler Wert gezählt. Was ist dein eigentliches Ziel? Warum nicht ein abgelehntes Versprechen z. 'yield Promise.reject (['Promise error'])' wenn der Fehler ein Array sein soll? – loganfsmyth

+0

Ich möchte einige Operationen wie 'yield [saveUserData(), saveOtherData(), doSomethingUsefull()]' und Ausgabe von allen in einem Array – JagsSparrow

+2

Eine Option wäre 'yield Promise.all ([saveUserData(), saveOtherData (), doSomethingUsefull()]) '? – loganfsmyth

Antwort

1

Dank fangen

@loganfsmyth Wir von

yield [Promise.reject('Promise error')] 

zu

den Code ändern kann
yield Promise.all([Promise.reject('Promise error')]); 

Gibt das erwartete Ergebnis.

Verwandte Themen