Ich benutze Redux-Saga, um einen Drittanbieter-Dienst zu initiieren, und ich möchte die Fehler aus dem Rückruf des Drittanbieters in die Saga propagieren, damit ich ordnungsgemäße Aktionen aus der Saga versenden kann. Wie kann ich das tun?Async Fehlerfortpflanzung in Sagas
In Sagas:
export function * handleFetchProducts() {
try {
const products= yield call(getProducts)
yield put(actions.fetchProductsSuccess(products))
} catch (e) {
yield put(actions.fetchProductsFailure(e))
}
}
In getProducts:
export async function getProducts() {
return new Promise((resolve, reject) => {
const kc = new Service()
return Service.initialize()
.success((products) => {
resolve(products)
})
.error(() => {
reject(new Error('Couldn\'t fetch'))
})
}
}
Ich weiß, dass da der Fehler aus dem Inneren eines Asynchron-Rückruf geworfen wird, kann ich es nicht fangen im try/catch der Sagas. Aber ich wollte nur wissen, was der richtige Weg ist, damit umzugehen.
Bitte beachten Sie, dass das Service-Modul unverändert aufgebaut ist und ich sein Verhalten nicht ändern kann.
Jede Hilfe wäre
Hat 'Service.initialize()' Rückkehr ein Versprechen verwenden könnte? Wenn ja, warum verwenden Sie 'Erfolg | Fehler' Callbacks? Wenn nein - warum markierst du 'getProducts' als Async, du" erwartest "nichts? –
Danke @YuryTarabanko für Hinweise. Nein, initialize() gibt kein Promise zurück, ich habe die Frage bearbeitet. – Hawkes
@YuryTarabanko, Entschuldigung für die Verwirrung, ich habe die Frage erneut bearbeitet, da ich die Erfolg | Fehlerrückrufe der getProducts() in einem Versprechen wickeln müsste, um Saga darauf warten zu lassen. – Hawkes