Концепции, которые вы упоминаете (управляемые событиями, неблокирующие, асинхронные, обратные вызовы), не являются специфическими для JavaScript, и их понимание в более общем контексте является ценным. Все они вращаются вокруг грамотно обрабатывающих ресурсов, над которыми мы не контролируем.
Представьте, что вы ожидаете передачи данных из TCP-соединения, ожидая, пока ОС удалит файл, или ждет, когда пользователь нажмет кнопку. Если вы запрограммировали это поэтапно (шаг за шагом синхронно), вы совершили бы кругосветное путешествие - «сделать шаг 1», «сделать шаг 2», «сделать шаг 3» - пока вы нажмите «Подождать, пока что-то случится». В этот момент ваша программа остановится и откажется сдвинуться с места, пока не получит данные, не получит подтверждение подтверждения или не получит нажатие кнопки. Другими словами, звонок блокирует программу от продолжения. Это довольно неэффективно, учитывая, что, вероятно, существуют другие TCP-соединения, операции с файлами и действия пользовательского интерфейса, которые требуют нашего внимания и не зависят от элемента, которого мы ждем.
Во многих случаях было бы лучше указать, что мы заинтересованы в ресурсе и получаем уведомления за пределами пошаговых инструкций при изменении ресурса. Из вашего списка понятий:
- Events изменения в ресурсах мы заинтересованы в том - наше соединение TCP получил некоторые данные, удаления файлов будет завершена, или пользователь нажал кнопку.
- Asynchronous звонки говорят OS или время выполнения, что мы заинтересованы в том, чтобы что-то делать с ресурсом. Они неблокирующие - наша программа может работать над чем-то еще, пока она ждет изменения в ресурсе.
- Callbacks - это функции, которые должны выполняться при изменении ресурса. Асинхронный вызов ресурсов часто принимает одну или несколько ссылок на функции обратного вызова (один для успеха, один для ошибки и т. Д.). Когда ресурс изменяется, среда выполнения вызывает соответствующий обратный вызов.
Мы можем видеть эти концепции, проиллюстрированные переименования файла с Node.js:
var fs = require('fs');
// args (current file name, new file name, callback function)
fs.rename('/tmp/hello', '/tmp/world', function (err) {
// this occurs when the rename is complete
if (err) throw err;
console.log('rename complete');
});
console.log('step after rename');
Третий аргумент может показаться странным. Это неназванная (anonymous) функция, которая будет вызываться, когда переименование будет завершено.
Обратите внимание, что с ф.rename является асинхронным, невозможно определить, увидим ли мы сначала сообщение «переименовать полный» или «шаг после переименования». Это недостаток для управляемых событиями/асинхронного программирования - если у нас есть сложный набор взаимозависимых задач, нам нужно быть предельно осторожными, чтобы обеспечить выполнение зависимых задач до задач, зависящих от них. Тот факт, что порядок завершения асинхронного вызова может измениться, может привести к очень тонким ошибкам.
Смотрите также:
Обработать по запросу Дональдс:
Лучший способ понять node.js - загрузить, построить, установить ll, и использовать его. Вам понадобятся:
- Mac OS или Linux. Если вам удобнее Cygwin, это также может быть вариантом, но если вы работаете под управлением Windows, мне проще запустить Linux на виртуальной машине.
- Git - не требуется, но он облегчает выборку репозитория кода.
- Способ отладки приложения. См. this question. Вначале может работать запись отладочной информации на консоль. В конце концов вам понадобится надежная отладка.
- Идея - что вы хотите делать с node.js? Если вас интересует обзор его возможностей, просмотрите its API.
Большинство учебников сосредоточиться на способности Node.js, чтобы быстро построить сервер HTTP:
Имейте в виду, что node.js заполняет очень конкретную нишу - i t предназначен для создания сетевых программ. Возможно, это не правильный инструмент для других типов программ.
Начните с написания много javascript-программ и заботы о том, чтобы все было хорошо и правильно. Нет смысла даже рассматривать NodeJS, если вы не понимаете javascript и соответствующие методы. Я не хочу быть суровым, но это то, что вам нужно узнать; JavaScript и как он используется и используется должным образом, это основы. Ergo, сначала мастер javascript;) много тэнов на этом в stackoverflow. – BGerrissen
Спасибо за ваш комментарий. Мне трудно учиться JS, потому что я не знаю, что с этим делать. Если я хочу изучить Django, Rails и т. Д. Я знаю, что делать, а не JavaScript. Кроме того, можете ли вы порекомендовать хорошую книгу, которая также может основывать знания node.js? thank – donald
Просто посмотрел на node.js. Это просто использование синтаксиса JS, например jQuery. Считаете ли вы, что глубокое знание JavaScript было бы гораздо более полезным при использовании node.js? Во всяком случае, прочитанная книга - это JavaScript: окончательное руководство – mplungjan