Сначала я пытаюсь вызвать updateValuesRouting - когда значение изменяется, я хочу полностью независимое действие, вызываемое (после полного завершения updateValuesRouting) в publishRouting. Проблема в том, что если я уберу тайм-аут из приведенного ниже кода, база данных закроется, и мои вызовы API больше не будут работать:
export function publishRouting(routingID, versionID, un, values){
const url = `${ROOT_ROUTINGS_URL}/${routingID.trim()}/${versionID.trim()}/publish?username=${un}`;
console.log("publish url:::",url);
return dispatch => {
dispatch({type: PUBLISH_ROUTING_LOADING, isLoading:true});
dispatch(updateValuesRouting(values, routingID)).then(
setTimeout(() => {
axios.put(url)
.then(({data}) => {
console.log("publish data returned:::", data);
dispatch(alertMessage("success", `${routingID} has been published!`));
dispatch(goToRouting(data.routingID, "000", history));
//window.location.reload();
dispatch({type: PUBLISH_ROUTING_SUCCESS, data}) ;
})
.catch((err) => {
dispatch(alertMessage("danger", `${routingID} failed with the following: ${err}`));
dispatch({type: PUBLISH_ROUTING_FAILURE, isCheckedOut: false, err})
console.log("publish error:", err);
})
}, 500)
);
};
}
export function updateValuesRouting(values, routingID ){
const url = `${ROOT_ROUTINGS_URL}/${routingID.trim()}/editing/meta`;
console.log("routing url:: ",url, values);
return dispatch => {
dispatch({type: UPDATE_VALUE_ROUTING_LOADING, isLoaded: false});
return axios.put(url, values)
.then(({data}) => {
console.log("returned values from updateValuesRouting:",data);
let myKeys = Object.keys(data);
let ind;
ind= myKeys.findIndex((x)=>{return x === 'headers'});
myKeys.splice(ind, 1);
ind= myKeys.findIndex((x)=>{return x === 'lastEditedDate'});
myKeys.splice(ind, 1);
ind= myKeys.findIndex((x)=>{return x === 'routingEditorMetaKey'});
myKeys.splice(ind, 1);
myKeys = myKeys.toString();
dispatch(alertMessage("success", `${routingID} has updated ${myKeys}!`));
dispatch({type: UPDATE_VALUE_ROUTING, data, isLoaded:true});
return Promise.resolve();
})
.catch((err) => {
dispatch(alertMessage("danger", `${routingID} has not updated values. ${err}`));
dispatch({type: UPDATE_VALUE_ROUTING_FAILURE, isLoaded: true})
})
}
}
При тайм-ауте все работает правильно, но я не могу гарантировать, что тайм-аут является действительным временем для сервера. Ясно, что я хотел бы, чтобы обещание было полностью выполнено. Как я могу проверить, что isLoaded имеет значение true для updateValuesRouting, чтобы убедиться, что я могу сделать следующий вызов Axios и обновить свои значения с сервера?