Envío expreso como resultado de la promesa.

No entiendo lo que está pasando …

Usando q promete, esto funciona:

 const deferred = q.defer(); deferred.resolve('Hellow'); const myPromise = deferred.promise; router.get('/items', (req, res) => { myPromise.then((result) => res.send(result)); }); 

pero esto no es así, mantiene el navegador como si la solicitud nunca terminara:

 router.get('/items', (req, res) => { myPromise.then(res.send); }); 

Que pasa

A continuación se muestra el fragmento de la librería express relacionada con res.send :

 res.send = function send(body) { var chunk = body; var encoding; var len; var req = this.req; var type; // settings var app = this.app; // allow status / body if (arguments.length === 2) { // res.send(body, status) backwards compat if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') { deprecate('res.send(body, status): Use res.status(status).send(body) instead'); this.statusCode = arguments[1]; } else { deprecate('res.send(status, body): Use res.status(status).send(body) instead'); this.statusCode = arguments[0]; chunk = arguments[1]; } } //..... 

Como puedes ver, hay muchas de this referencias. En su caso, myPromise.then(res.send) this refiere al objeto de promesa, no a res , por eso su código no funciona.

Puede cambiar el contexto usando el método .bind , por this se referirá al objeto res :

 router.get('/items', (req, res) => { myPromise.then(res.send.bind(res)); });