Skip to content

Instantly share code, notes, and snippets.

@intech
Created May 15, 2014 22:24
Show Gist options
  • Save intech/af4e75253d8bfae6c41f to your computer and use it in GitHub Desktop.
Save intech/af4e75253d8bfae6c41f to your computer and use it in GitHub Desktop.
Урок про modules и async.queue
#!/usr/bin/node
function cb(data) {
console.log('[>] Выполнена задача', data);
}
function empty() {
console.log('[!] Очередь пуста (выполняется последнее задание)');
}
function drain() {
console.log('[!] Все задания выполнены (последнее задание выполнено)');
}
var image = require('./image')(cb, drain, empty);
// или можно так
// imageModule = require('./image');
// var image = new imageModule(cb);
image.upload('1.png', 200, 200, './file/');
image.upload('2.png', 200, 200, './file/');
image.upload('3.png', 200, 200, './file/');
//image.thumb('./file/123.png', 200, 200);
/**
* Created by ivan on 16.05.14.
*/
var async = require('async');
module.exports = function(cb, drain, empty) {
return {
upload : function(file, width, height, path) {
// создаём обработчик заданий
var q = async.queue(function (task, callback) {
var count = typeof task.count !== 'undefined' ? task.count : '';
// проверка fs.stat
if(count <= 3) {
// работа с файлом он найден
console.log(task);
// gm.a().b().c().write(function(err, ok) {
// if(err) return callback(err);
// для результата можем вернуть любой объект и свойства
task.newprop = 'всё круто';
// возвращаем сам результат
cb(task);
// завершаем задачу
callback();
// });
} else {
task.count++;
// рекурсия
q.push(task);
// завершаем задачу
callback();
}
}, 3); // выполнять не более чем в 3 потока
// callback на функции вспомогательные
q.drain = drain;
q.empty = empty;
// теперь добавляем наше задание в обработку
q.push({
file : file,
width : width,
height : height,
path : path
});
},
thumb : function() {
console.log('thumb');
cb('thumb done!');
}
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment