Вы, кажется, путаете асинхронный ввод-вывод с асинхронными функциями.node.js использует асинхронный неблокирующий ввод-вывод, потому что лучше не блокирующий ввод-вывод.Лучший способ понять это - посмотреть видео от Райана Дала.
Как мне написать асинхронные функции для узла?
Простописать нормальные функции, единственное отличие состоит в том, что они не выполняются сразу, а передаются как обратные вызовы.
Как правильно реализовать обработку событий ошибок
Обычно API выдают обратный вызов с ошибкой в качестве первого аргумента.Например,
database.query('something', function(err, result) {
if (err) handle(err);
doSomething(result);
});
- это обычный шаблон.
Другой распространенный шаблон - on('error')
.Например,
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
Редактировать:
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
Приведенная выше функция при вызове как
async_function(42, function(val) {
console.log(val)
});
console.log(43);
Распечатает 42
наконсоль асинхронно.В частности, process.nextTick
срабатывает после того, как текущий стек вызовов Eventloop пуст.Этот стек вызовов становится пустым после выполнения async_function
и console.log(43)
.Таким образом, мы печатаем 43, а затем 42.
Возможно, вам следует прочитать цикл обработки событий.