2014-02-17 2 views
1

В несколько раз сложнее программировать, используя продолжения (обратные вызовы), а не в модели прямого последовательного выполнения. Может ли NodeJs блокировать звонки?Есть ли способ сделать блокирующий вызов в Node.Js?

+0

Вы можете использовать модуль, например 'async', чтобы управлять цепочкой обратного вызова. – Joe

+0

Если все, что вы делаете, это доступ к файловой системе, то вы можете использовать синхронные функции в модуле 'fs'. В противном случае нет механизма для создания асинхронного функционального блока. Как упоминает @Joe, вам следует более эффективно работать над управлением обратными вызовами. Это не сложно или сложно, когда вы привыкли к этому. – qubyte

ответ

2

Да, это возможно. Например, вы можете прочитать файл с fs.readFileSync(), а не fs.readFile(). Каждая библиотека обычно предоставляет метод xxxSync для синхронных/блокирующих методов.

Но вы не должны использовать метод синхронизации очень часто. Помните, что Node.js использует один поток выполнения для кода JavaScript. Если вы блокируете этот поток, вы блокируете его для всех (в отличие от C#/Java, где будет создан новый поток для каждого запроса.)

Если для асинхронного подхода слишком много, вы можете использовать другую платформу (Ruby, Python, PHP).

+0

это не слишком много, просто иногда возникает ненужная сложность. –

+0

Некоторая работа, выполняемая на самом языке (например, генераторы) или доступных библиотеках (например, async), может помочь с синтаксисом, но я слышу вас. Иногда вам нужен простой последовательный рабочий процесс, и в Node.js он не так аккуратен, как на других языках. –

0

Да, node.js 0.11.x может блокировать вызовы внутри, если генератор. Под «блокировкой вызова» я имею в виду остановку выполнения текущей функции на некоторое время. Посмотрите на co библиотеки.

Это единственный рекомендованный способ блокировки вызовов.

Кроме этого, вы можете посмотреть fibers, но его необходимо использовать осторожно, а не в библиотеках общего назначения.

Существует также несколько вызовов * Синхронизация, упомянутых ранее, но, пожалуйста, не используйте их полностью, если вы не пишете однострочный.

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