【发布时间】:2014-03-23 05:03:06
【问题描述】:
我正在为 node.js 编写一个小脚本,以从文件中读取一堆图像名称(2.5k),调整图像大小并将它们输出到目录。我天真的方式导致文件句柄用完:
//get the list of images, one per line in the file
var imgs = file.split('\n');
//keep track of how many images we've processed
var done = imgs.length;
var deferred = Q.defer();
for (var i = 0; i < imgs.length; i++) {
(function resizeImg(img) {
//open the file for writing the resized image to
var stream = fs.createWriteStream('images/' + img);
stream
.on('open', function () {
//now that it's opened, resize the source image, and write it
//out to the stream
gm(img)
.resize(200, 200)
.write(stream, function (err) {
//we're finished writing - if there was an error, reject
//otherwise, we can resolve the promise if this was the last image
if (err)
deferred.reject(err);
else if (--done <= 0)
deferred.resolve();
});
});
})(imgs[i]);
}
return deferred.promise;
我真正需要做的是将所有调整大小操作排队并按顺序运行它们,这样它就不会同时打开所有文件,但我不知道该怎么做。这类事情有标准模式吗?
【问题讨论】:
-
您可以同时打开多少个文件?你能动态检测(并且你想适应)这个吗?还是一次只运行一个?
标签: javascript node.js promise q