在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 關于yield koa的一個小問題 thunk回調函數?

關于yield koa的一個小問題 thunk回調函數?

this.body = yield service.get_search_data(key,start,end);

exports.get_search_data =
function(key,start,end){

return
function(cb){

var req = http.request(http_request,function(response){

var body = '';

response.setEncoding('utf-8');

response.on('data',function(chunk){

body += chunk;

});

response.on('end',function(){

cb(null,body);

});

});

req.end();

}

}

這樣的一串代碼(精簡過了),返回給body數據,但是從頭到尾都沒有cb()這個函數的定義阿,為什么可以得到正確的返回值?cb函數的定義在哪里?

回答
編輯回答
不討囍

這個要看co模塊的源碼 ,yield后面如果跟的是一個chunk函數,co會把它包裝成一個Promise對象

function thunkToPromise(fn) {
  var ctx = this;
  return new Promise(function (resolve, reject) {
    fn.call(ctx, function (err, res)/* 這個就是cb函數 */{
      
      if (err) return reject(err);
      if (arguments.length > 2) res = slice.call(arguments, 1);
      resolve(res);
    });
  });
}
2018年2月27日 10:20