Domanda

Sto cercando di impostare uno script node.js per utilizzare le promesse di ECMAScript 6.Sono in grado di eseguire il lavoro di cui ho bisogno nello script del nodo, che richiede molti recuperazioni di un server esterno (così è temporalmente costoso), ma non è in grado di rispondere al client perché la costruttiva delle promesse causa una perdita di riferimento alla risposta (cosìSto indovinando).

Come posso propagare l'oggetto di risposta alle ultime promesse then() e rispondere alla richiesta?

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

È stato utile?

Soluzione

È sufficiente inserire la chiamata di servizio all'interno del gestore del percorso:

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

Proprio come in codice sincrono chiami una funzione nel contesto che desideri eseguire:

var data = myService();
doSomethingWith(data);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top