我正在使用redux-saga来发起第三方服务,我想将错误从第三方的回调传播到传奇,以便我可以从传奇中发出适当的动作。我怎么能这样做?
在传奇中:
export function * handleFetchProducts () {
try {
const products= yield call(getProducts)
yield put(actions.fetchProductsSuccess(products))
} catch (e) {
yield put(actions.fetchProductsFailure(e))
}
}
在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'))
})
}
}
我知道因为错误是从异步回调中抛出的,所以我无法在传奇的try / catch中捕获它。但是,我只是想知道应该采用什么方法处理这个问题。
请注意,服务模块按原样构建,我无法改变它的行为。
任何帮助都是
答案 0 :(得分:1)
你可以宣传getProducts
export function getProducts() {
return new Promise((resolve, reject) => {
const kc = new Service()
kc.initialize()
.success(resolve)
// this will be caught
.error(() => reject(new Error('...')))
})
}
或者您可以使用cps
效果
export getProducts(next) {
new Service()
.initialize()
.success(products => next(null, products))
.error(() => next(new Error('...')))
}
//and in handleFetchProducts
try {
const products= yield cps(getProducts)
...
}