【发布时间】:2015-12-16 18:59:48
【问题描述】:
我知道this 的问题,但我的需求有点不同。
我正在尝试下载多张图片,但无法阻止应用在该过程完成之前退出。我已经经历了很多次迭代,这就是我目前所处的位置:
router
.post('/', koaBody(), function *() {
var images = [];
//console.log(this.request.body.fields);
if (this.request.body.fields) {
images = this.request.body.fields['images'];
imageCount = images.length;
} else {
this.status = 500;
return;
}
var url = 'https://www.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png';
var filepath = '../images/image_1.png';
var pipeRequest = function (url, filepath) {
return new Promise(function (resolve, reject) {
request.get(url)
.pipe(fs.createWriteStream(filepath))
.on('finish', function () {
console.log('piped');
});
});
};
co(function*() {
yield pipeRequest(url, filepath);
}).then(function () {
console.log('done co-func');
}).catch(function (err) {
return console.error(err);
});
console.log('App exiting...');
});
这不是最优雅的代码,但它可以工作,如果我将协同函数包装在一个循环中,我可以下载任意数量的代码(最终目标是让这个 API 接收图像 URL 的 JSON 列表)。但是,我不能做的是将管道的结果返回给调用者,该应用程序将始终在该过程完成之前退出。我认为将函数调用包装在 yield 中会是答案……但不是。
【问题讨论】:
标签: javascript generator koa