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')]
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
Ich möchte einige Operationen wie 'yield [saveUserData(), saveOtherData(), doSomethingUsefull()]' und Ausgabe von allen in einem Array – JagsSparrow
Eine Option wäre 'yield Promise.all ([saveUserData(), saveOtherData (), doSomethingUsefull()]) '? – loganfsmyth