Вы захотите использовать .then(…, …)
вместо .then(…).catch(…)
только для обработки отклонений от loadLinkTableFromDB
, но не от pushLinkTableToDB
:
dispatch(loadLinkTableFromDB(username))
.then(loadLinkTableResultMsg) => {
console.log('Successfully loaded link table: ', loadLinkTableResultMsg)
return dispatch(pushLinkTableToDB(username))
}, loadLinkTableErrorReason => {
console.log('Failed to load link table from DB: ', loadLinkTableErrorReason);
if (allReasonsAcceptableForOverwrite(loadLinkTableErrorReason)) {
return dispatch(pushLinkTableToDB(username));
} else {
throw loadLinkTableErrorReason;
}
})
.then( /* do more stuff that relies on the LinkTable */ )
.catch(unacceptableRejectionReasons => {
console.log('unacceptableRejectionReasons :', unacceptableRejectionReasons);
})
Однако, учитывая вы хотите pushLinkTableToDB
в обоих случаях, вы можете захотеть переместить это вниз по цепочке и удалить дублирование:
dispatch(loadLinkTableFromDB(username))
.then(loadLinkTableResultMsg) => {
console.log('Successfully loaded link table: ', loadLinkTableResultMsg)
}, loadLinkTableErrorReason => {
console.log('Failed to load link table from DB: ', loadLinkTableErrorReason);
if (!allReasonsAcceptableForOverwrite(loadLinkTableErrorReason)) {
throw loadLinkTableErrorReason;
}
})
.then(() => dispatch(pushLinkTableToDB(username)))
.then( /* do more stuff that relies on the LinkTable */ )
.catch(unacceptableRejectionReasons => {
console.log('unacceptableRejectionReasons :', unacceptableRejectionReasons);
})
Без сообщений журнала вы также можете использовать только catch
- вы просто необходимо поместить его перед вызовом pushLinkTableToDB
:
dispatch(loadLinkTableFromDB(username))
.catch(loadLinkTableErrorReason => {
if (!allReasonsAcceptableForOverwrite(loadLinkTableErrorReason)) {
throw loadLinkTableErrorReason;
}
})
.then(() => dispatch(pushLinkTableToDB(username)))
.then( /* do more stuff that relies on the LinkTable */ )
.catch(unacceptableRejectionReasons => {
console.log('unacceptableRejectionReasons :', unacceptableRejectionReasons);
})
Если вы управляете функцией loadLinkTableFromDB
, вы можете даже подумать о перемещении вызова catch
внутри этой функции, чтобы возвращаемое обещание только отклоняется с недопустимыми ошибками и в противном случае соответствует приемлемым результатам.