ecmascript-6 - then - understanding promises javascript
Promesas es6 y superagente (3)
Estoy intentando usar promesas es6 con superagente. Intento llamar a una función que tiene una solicitud de superagente dentro.
Request.post(buildReq).then(res => {
if (res.ok) {//process res}
});
Aquí está la función que envuelve el superagente
static post(params) {
superagent
.post(params.url)
.send(params.payload)
.set(''Accept'', ''application/json'')
.end((error, res) => {
return this.Promise.resolve(res);
})
.bind(this);
}
Me sale un error
enter code here Uncaught TypeError: Cannot read property ''then'' of undefined
Cuando cambio el retorno de la función a
static post(params) {
return Promise.resolve(superagent
.post(params.url)
.auth(params.auth.username, params.auth.password)
.send(params.payload)
.set(''Accept'', ''application/json'')
.end((error, res) => {
return this.Promise.resolve(res);
})
);
}
Parece que los datos se devuelven en las herramientas de desarrollo de mi navegador, pero no puedo acceder a ellos en la función .then. ¿Cómo puedo obtener la respuesta de la promesa?
Algunas veces desea evitar un nivel de sangría causado por new Promise(...)
luego puede usar directamente Promise.reject
y Promise.resolve
.
static post(params) {
return superagent
.post(params.url)
.auth(params.auth.username, params.auth.password)
.send(params.payload)
.set(''Accept'', ''application/json'')
.end((error, res) => {
error ? Promise.reject(error) : Promise.resolve(res);
});
});
}
Esta es una versión más integral, en caso de que la necesite para una gran cantidad de solicitudes
import request from "superagent";
const withPromiseCallback = (resolve, reject) => (error, response) => {
if (error) {
reject({error});
} else {
resolve(response.body);
}
};
export const fetchSuggestions = (search) => new Promise((resolve, reject) =>
request.
get("/api/auth/get-companies/0/50").
type("form").
set("Accept", "application/json").
query({
search,
}).
end(withPromiseCallback(resolve, reject))
);
export const fetchInitialInformation = () => new Promise((resolve, reject) =>
request.
get("/api/auth/check").
set("Accept", "application/json").
end(withPromiseCallback(resolve, reject))
);
No importa qué devuelve desde la devolución de llamada del método end
, ya que se ejecuta de forma asíncrona cuando se obtiene una respuesta y el resultado de la ejecución de la devolución de llamada no se utiliza en ninguna parte. Mira aquí y aquí en el código fuente. end
método end
devuelve, por lo que en el segundo ejemplo, usted está resolviendo el proceso de superagent
no respuesta. Para obtener respuesta, su método de post
debe ser similar a:
static post(params) {
return new Promise((resolve, reject) => {
superagent
.post(params.url)
.auth(params.auth.username, params.auth.password)
.send(params.payload)
.set(''Accept'', ''application/json'')
.end((error, res) => {
error ? reject(error) : resolve(res);
});
});
}