what understanding then promises pending explained catch await async ecmascript-6 superagent es6-promise

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); }); }); }