2013年10月1日 星期二

NodeJS , return From call Function.

在 NodeJS , 因為是 事件驅動

所以在 流程上的控制比較無法像一般程式那麼直覺式的方式去執行

可以利用 callback 的方式,轉換成比較像是 一般程式 的執行方式去呼叫





var http = require('http');

var httpreq = {
 get : function () {},
 post : function (options, cb) {

  var req = http.request(options, function (res) {
    // console.log('STATUS: ' + res.statusCode);
    // console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
     // console.log('BODY: ' + chunk);
     var str = chunk.substr(0, 50);
     cb(str);  //  執行傳進來的 function.
    });
   });

  req.on('error', function (e) {
   console.log('problem with request: ' + e.message);
  });

  // write data to request body
  // console.log('write');
  req.write('data\n');
  // console.log('end');
  req.end();

 }
}

var options = {
 hostname : 'www.google.com',
 port : 80,
 path : '/upload',
 method : 'POST'
};

httpreq.post(options, function (d) {
 console.log(d);
});




這種方法也可以在 JavaScript 使用,如下:

var httpreq = {
 get : function () {},
 post : function (options, cb) {
        $.ajax( options )
        .done(cb);
 }
}

var options = {
 url : 'echo.php',
 method : 'POST'
};

httpreq.post(options, function (d) {
 console.log(d);
});



參考連結:Continuation-Passing Style (CPS)
http://ithelp.ithome.com.tw/question/10119265?tag=ithome.nq

沒有留言:

張貼留言