Question

J'essaie de configurer un script Node.js pour utiliser les promesses ECMAScript 6.Je suis capable de faire le travail dont j'ai besoin dans le script Node, ce qui nécessite de nombreuses récupérations sur un serveur externe (ce qui est donc coûteux en termes de temps), mais je ne peux pas répondre au client car la construction Promises provoque une perte de référence à la réponse (donc Je devine).

Comment puis-je propager l'objet Response aux dernières promesses then() et répondre à la demande ?

var http = require("http");
var Promise = require('es6-promise').Promise;
//...

var promise = new Promise(function(resolve, reject){
   //...
   var req = http.request(options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function (data) {
         buffer += data.toString();
      });
      res.on('end',function(d){
         //...stuff done with buffer...
         return resolve(0);
      });
  });

  req.end();
});

promise.then(function(i){

   //...expensive work on array...

   return Promise.all(myArrayData);
});

promise.then(function(result){
   //...want to reply to the request here, e.g.,...
   res.write(result);
});
Était-ce utile?

La solution

Il vous suffit de placer l'appel de service dans le gestionnaire de route :

app.get("/",function(req,res){
    myService().then(function(result){
        res.write(result);
        // res.end();
    });
});

Tout comme dans le code synchrone, vous appelez une fonction dans le contexte dans lequel vous souhaitez qu'elle s'exécute :

var data = myService();
doSomethingWith(data);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top