async function unsubscribeUserHandler() { const unsubscribe = await fetch("/api/stripe-sessions/cancel-subscription", { method: "PATCH", body: JSON.stringify(), headers: { "Content-Type": "application/json", }, }); const data = await unsubscribe.json(); if (!unsubscribe.ok) { Toast.fire({ icon: "error", title: `${data.message}`, }); } else { Toast.fire({ icon: "success", title: `${data.message}`, }); } } async function deleteUserHandler() { const deleteUser = await fetch("/api/user/delete-account", { method: "DELETE", body: JSON.stringify(), headers: { "Content-Type": "application/json", }, }); const data = await deleteUser.json(); if (!deleteUser.ok) { Toast.fire({ icon: "error", title: `${data.message}`, }); } else { Toast.fire({ icon: "success", title: `${data.message}`, }); } } const deleteAccount = async () => { try { await unsubscribeUserHandler(); await deleteUserHandler(); } catch (err) { console.error('ERROR@@@@@!!!',err); } } const Settings = () => { return <DeleteAccount onDeleteAccount={deleteAccount} />; };Como se muestra aquí, quiero darme de baja... solo después de darme de baja, luego ejecutar el controlador de eliminación.
Tengo problemas en los que solo ejecuta uno de los controladores y no el otro. ¿Hay otras formas de hacer esto?
He intentado:
.then(() => deleteUserHandler())y
.then(deleteUserHandler)arriba no llama a /api/user/delete-account,
solo para darse de baja.
Esto está mal:
const deleteAccount = () => unsubscribeUserHandler() .then(deleteUserHandler()) .catch(console.error); No está pasando deleteUserhandler a then() , lo llama inmediatamente y pasa el resultado a then() .
Para arreglar, pierde el paréntesis:
const deleteAccount = () => unsubscribeUserHandler() .then(deleteUserHandler) .catch(console.error);O use una función de flecha:
const deleteAccount = () => unsubscribeUserHandler() .then(() => deleteUserHandler()) .catch(console.error);O mejor aún:
const deleteAccount = async () => { try { await unsubscribeUserHandler(); await deleteUserHandler(); } catch (err) { console.error(err); } }