Tengo esta duda rápida que podría estar relacionada con el encadenamiento de promesas, pero no puedo pensar en ello con claridad.
Básicamente, tengo esta función (myFn) que devuelve axios.request() que básicamente devuelve una promesa, así que ahora puedo hacer myFn.then().catch() y funciona, ahora lo que quiero hacer es cree un contenedor de promesa además de eso, que se resolverá solo cuando response.data.status =="somevalue" , aquí response.data significa que la solicitud fue exitosa y llegó un resultado, pero ahora quiero resolver myFn solo cuando response.data.status =="somevalue" .
Dado que su función devuelve una promesa, puede usar el resultado de la promesa en la devolución de llamada .then. Si response.data.status no es lo que desea, arroje un error; de lo contrario, devuelva la respuesta, resolviendo así la promesa:
myFn().then(response => { if (response.data.status !== "somevalue") { throw new Error("invalid status"); } return response; })Editar: si desea envolver esto en una Promesa personalizada, podría hacer algo como esto:
const myPromise = new Promise((resolve, reject)=>{ myFn().then(response => { if (response.data.status !== "somevalue") { reject("Invalid status");} else{ resolve("somevalue");} }); });Y luego llame a esta promesa con funciones de devolución de llamada para los casos cumplidos y rechazados de la promesa:
myPromise.then(handleSucess, handleFailure);Para referencia, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Puedes probar si esto te funciona. Sin embargo, no estoy seguro de si el lanzamiento aquí funciona como se esperaba.
const axiosInstance = axios.create({ transformResponse: [function (data) { if (data.status === "somevalue") { return data; } throw new Error(`wrong status: ${data.status}`); }], }); Luego use este axiosInstance para hacer sus llamadas.
Si esto no funciona, también puede probar los interceptores de respuesta axios. ¿Cómo puedes usar los interceptores axios ?