给出了一组提议,我想向服务器发送许多http请求以创建它们。我正在使用redux-saga,我正在努力使它们顺序且相互依赖。
事实上,如果其中只有一个失败,我希望下一个失败:
我尝试过这种方式
function* handleCreateOffers(action: ReturnType<typeof createOffers>) {
console.log(action.payload)
try {
const responses = action.payload.offers.map(offer => {
httpCreateOffer('/createOffer', offer)
.then(result => result)
.catch(err => {
throw new Error('Socket Event Timeout')
})
})
} catch (err) {
if (err instanceof Error && err.stack) {
yield put(createOffersError(err.stack))
} else {
yield put(createOffersError('An unknown error occured.'))
}
}
}
但是,当我抛出错误时,它似乎并没有到达catch语句,而是继续滚动数组
谢谢
您可以尝试这样的事情:
function* handleCreateOffers(action: ReturnType<typeof createOffers>) {
const offers = action.payload.offers.
for (let i = 0; i < offers.length; i += 1) {
try {
const result = yield call(httpCreateOffer, '/createOffer', offers[i]);
} catch (err) {
if (err instanceof Error && err.stack) {
yield put(createOffersError(err.stack))
} else {
yield put(createOffersError('An unknown error occured.'))
}
break;
}
}
}
您的错误处理将有所不同。重要的部分是break
循环。