Как правильно написать кастомный асинхронный модуль на NodeJS?

Доброго времени суток, изучаю JS и в данный момент платформу NodeJS, столкнулся с тем, что не могу понять, как правильно пишутся свои модули на Nod-е. Откровенно говоря, в голове уже каша из event-ov, callback-ov, nextTickov (setTimeout)
Везде как эталон асинхронности приводят пример модуль FS:
var fs = require('fs');
fs.readFile('name.txt', function (err, data) {
});

Подключили модуль fs, вызвали его метод и передали в него переменную и колбэк.
Проблема в том, что нигде не пишут, а что там происходит внутри. Путем гугления и изучения, пришел к такому коду :
// my custom module
function MyModule(something, callback){
    if(something === 'OK'){        // Обрабатываем как-то something и передаем дальше
      process.nextTick( сallback(null, something));
    } else {
       process.nextTick( callback('Error')); 
    };
};
module.exports = MyModule;


Ну и использование его как и модуль fs:
var MyModule = require('MyModule');
MyModule('something', function( err, value ) {
   if(err) console.log('Вай-вай, беда!')
   // ну а тут делаем еще что-то с value
});

Ну а теперь сам вопрос, будет ли это асинхронным и вообще работать или я не в ту степь забрел совсем ?
Благодарю.
ЗЫ. так же в голове крутится идея навесить на всё что можно event-ы, но пока не могу оформить связно как это вижу. Если кому не сложно киньте код подобного на ивентах или линк на статью толковую. Еще раз спасибо.
  • Вопрос задан
  • 952 просмотра
Решения вопроса 2
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Так можно же посмотреть, как написан тот же модуль fs: https://github.com/joyent/node/blob/master/lib/fs.js
Как писать асинхронные функции Вы нашли, код нормальный, а вот асинхронный модуль - это нонсенс, вот модуль fs синхронный или асинхронный? Ведь в нем есть fs.readFile и fs.readFileSync. Модуль может содержать и синхронный и асинхронный код, вообще в ноде асинхронно решается обычно только ввод-вывод: работа с файлами, сетью, базой данных. Весь остальной код остается синхронным. Чувствуется, что Вы еще не полностью освоили ноду, а уже хотите делать свои модули. Рекомендую Вам перед этим почитать исходники хороших модулей, например, вот этих небольших и хорошо написанных:
https://www.npmjs.com/package/mkdirp
https://www.npmjs.com/package/ncp
https://www.npmjs.com/package/colors
Советую пройти nodeschool.io/ru и потренироваться в использовании модулей, а потом уже делать свои. Еще обязательно освойте библиотеку async: https://github.com/caolan/async и посмотрите что такое EventEmitter https://nodejs.org/api/events.html Ну и конечно читайте исходники ноды и других модулей. Статей же нагуглить или на Хабре нарыть - не должно быть проблемой.
Ответ написан
@tex0
gMyModule.prototype.DoSomething = function(variable, callback)
{
	process.nextTick(function(){
		/*
			основной алгоритм, использующий variable
		*/
		callback(result, error);// результат работы алгоритма (либо всё ОК, либо ошибка)
	});
}

module.exports.MyModule = gMyModule;


вроде как-то так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы