2015-02-15 5 views
1

Я хочу трубу запроса в контроллере коа, это работа:Как получить readStream с thunk в koa?

var s = require('through2')(); 
var req = http.request(url, function(res) { 
    res.pipe(s); 
}) 
req.end(null); 

s.on('close', function() { 
    console.log('has close'); 
}); 
this.body = s; 

Но стук, это, кажется, не работают.

var s = stream(); 
yield thunk(url, s); 
this.body = s; 

Вот thunk:

var thunk = function (url, s) { 
    return function(callback) { 
    var req = http.request(url, function(res) { 
     res.pipe(s); 
    }); 
    s.on('close', function() { 
     callback(null, null); 
     console.log('req inner close'); 
    }); 
    req.end(null); 
    } 
} 

ответ

2

Используйте обещание для этого (вернуть обещание, а не стуком). С верхней части моей головы, так что вам, возможно, придется играть с ним вокруг:

function run(url, s) { 
    return new Promise(function(resolve, reject) { 
    var req = http.request(url, function(res) { 
     res.pipe(s); 
     res.on('end', function() { 
     req.end(); 
     }); 
    }); 

    req.on('error', function(err) { 
     return reject(err); 
    }); 

    s.on('close', function() { 
     console.log('req inner close'); 
     return resolve(); 
    }); 
    }); 
} 

Тогда:

yield run(url, s); 

 Смежные вопросы

  • Нет связанных вопросов^_^