Estoy haciendo solicitudes síncronas, es decir, siempre configuro {async: false} .
Mi problema es que, mientras que $.ajax() de jQuery devuelve los datos de respuesta que quiero que devuelva, $http() de AngularJs devuelve una promesa que es un gran dolor para mí.
A continuación, hay un código para demostrar mi problema.
Esto es jQuery:
// Library for sending $.ajax requests Core.libs.prototype.send = function(...) { var options = { async: false, // ... }; return $.ajax(options).done(function(data) { return data; }); } // Here I make requests let rest = Core.libs.rest(...); // Get the library let myVar = rest.send(...); // Make the request console.log(myVar); // This returns an array from DB: [apple, orange] which is OKY esto es AngularJS:
// Library for sending $http requests Core.libs.prototype.send = function(...) { var options = { async: false, // ... }; return $http(options).then(function(response) { return response.data; }, function(err) { return err; }); } // Here I make requests let rest = Core.libs.rest(...); // Get the library let myVar = rest.send(...); // Make the request console.log(myVar); // This returns a PROMISE which is not what I want ¿Hay alguna forma de modificar Core.libs.prototype.send para devolver datos reales en lugar de una promesa?
Me gustaría evitar modificar cualquier otra cosa que no sea el método de la biblioteca.
No quiero esta solución, porque entonces tendría que reemplazarla en todas partes de mi código:
let rest = Core.libs.rest(...); // Get the library let myVar = rest.send(...).then(data => data); // Make the request console.log(myVar); // This returns [apple, orange] but I don't want this solutionTambién probé esto, pero no funciona como se esperaba:
// Library for sending $http requests Core.libs.prototype.send = async function(...) { var options = { // ... }; let res = await $http(options).then(function(response) { return response.data; }, function(err) { return err; }); return res; } // Here I make requests let rest = Core.libs.rest(...); // Get the library let myVar = rest.send(...); // Make the request console.log(myVar); // This still returns a PROMISE. Why?Debería aceptar la promesa/async await, pero ese no es el punto de su pregunta. Para lograr lo que desea, llame usando la notación async/await o la cláusula then() , pero no juntos:
// Library for sending $http requests Core.libs.prototype.send = async function(...) { var options = { // ... }; try { const response = await $http(options); return response.data; } catch (err) { return err; } }