سؤال

أحاول إعداد عقدة.شبيبة النصي لاستخدام إكماسكريبت 6 وعود.أنا قادر على القيام بالعمل الذي أحتاجه في البرنامج النصي للعقدة ، والذي يتطلب العديد من جلب خادم خارجي (لذلك هو مكلف مؤقتا) ، ولكن أنا غير قادر على الاستجابة للعميل لأن بناء الوعود يسبب فقدان الإشارة إلى الاستجابة (لذلك أنا التخمين).

كيف يمكنني نشر كائن الاستجابة إلى الوعود الأخيرة then() والرد على الطلب?

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);
});
هل كانت مفيدة؟

المحلول

تحتاج ببساطة إلى وضع مكالمة الخدمة داخل معالج المسار:

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

تماما كما هو الحال في التعليمات البرمجية المتزامنة التي تستدعي وظيفة في السياق الذي ترغب في تنفيذه:

var data = myService();
doSomethingWith(data);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top