2013-12-17 8 views
3

Я новичок в NodeJS. Я видел, что для одной задачи есть отдельные асинхронные и синхронные функции (например: {fs.writeFile,fs.writeFileSync}, {fs.read, fs.readSync}).Асинхронный синхронный синхронный в NodeJS

Может ли кто-нибудь объяснить, почему это так? и в чем разница?

+1

Вы понимаете, что означает async? – SLaks

+0

Да. Я не видел функции async и sync для выполнения одной и той же задачи на любом другом языке программирования или скриптинга. Вот почему я спросил об этом. –

+0

C# имеет синхронизирующие и асинхронные версии большинства неблокирующих операций. – SLaks

ответ

7

Асинхронный:

  1. Отправить запрос
  2. идти с другим кодом
  3. ответ приходят в любое время на обратный вызов

Синхронизация:

  1. Отправить запрос
  2. Дождитесь ответа
  3. идти с другим кодом после ответа
7

Причина, по которой обе синхронизации и асинхронное verisons этих операций является то, что они могут быть отнимающим много времени, и поскольку node.js имеет одно- потоковый основной цикл событий, вы ни в коем случае не хотите блокировать цикл событий медленными синхронными вызовами функций.

Вот почему все делается с помощью обратных вызовов (или обещаний, обетах или того, что ваш особый вкус в асинхронном материале). Таким образом, вы можете иметь цикл событий, который просто вызывает функцию async и обрабатывает результат функции async в обратном вызове, когда это произойдет.

Это одна из основных преимуществ node.js и одно из основных правил: «не блокировать цикл основного события».

+0

Я слышал о обещаниях (из-за jQuery), но ничего не сказал об обетах ... Если у вас есть ссылка на статью, чтобы лучше понять эти концепции, я буду признателен , Благодарю. – alexserver

+0

Я думаю, что я случайно путал две концепции в моей голове при написании этого ответа, и я, вероятно, имел в виду фьючерсы. Вот статья о том, если вам это нужно: http://en.wikipedia.org/wiki/Futures_and_promises Существует, однако, модуль npm, называемый wovs, который является инструментом/каркасом BDD – Frost

2

В отношении node.js fs.writeFile doc он асинхронно записывает данные в файл. Это означает, что если у вас есть следующий код:

1. some db operation 
2. some non-related db operation 

В таком случае первая операция не будут блокировать 2-й операцию. Вторая операция выполняться сразу же после того, как 1 (без ожидания завершения)

Однако, есть несколько сценариев, как:

1. some db operation 
2. some related db operations(which you can't put in callbacks) and forcefully want to be after 1st operation. 

Затем используйте fs.writeFileSync.

Смежные вопросы