В несколько раз сложнее программировать, используя продолжения (обратные вызовы), а не в модели прямого последовательного выполнения. Может ли NodeJs блокировать звонки?Есть ли способ сделать блокирующий вызов в Node.Js?
ответ
Да, это возможно. Например, вы можете прочитать файл с fs.readFileSync(), а не fs.readFile(). Каждая библиотека обычно предоставляет метод xxxSync для синхронных/блокирующих методов.
Но вы не должны использовать метод синхронизации очень часто. Помните, что Node.js использует один поток выполнения для кода JavaScript. Если вы блокируете этот поток, вы блокируете его для всех (в отличие от C#/Java, где будет создан новый поток для каждого запроса.)
Если для асинхронного подхода слишком много, вы можете использовать другую платформу (Ruby, Python, PHP).
это не слишком много, просто иногда возникает ненужная сложность. –
Некоторая работа, выполняемая на самом языке (например, генераторы) или доступных библиотеках (например, async), может помочь с синтаксисом, но я слышу вас. Иногда вам нужен простой последовательный рабочий процесс, и в Node.js он не так аккуратен, как на других языках. –
Да, node.js 0.11.x может блокировать вызовы внутри, если генератор. Под «блокировкой вызова» я имею в виду остановку выполнения текущей функции на некоторое время. Посмотрите на co библиотеки.
Это единственный рекомендованный способ блокировки вызовов.
Кроме этого, вы можете посмотреть fibers, но его необходимо использовать осторожно, а не в библиотеках общего назначения.
Существует также несколько вызовов * Синхронизация, упомянутых ранее, но, пожалуйста, не используйте их полностью, если вы не пишете однострочный.
- 1. Как сделать img.show() блокирующий вызов в подушке?
- 2. Есть ли способ сделать синхронный вызов ajax?
- 3. Есть ли способ выполнить блокирующий код в javascript?
- 4. RxJS блокирующий вызов
- 5. _write в io.h блокирующий вызов?
- 6. Есть ли способ сделать объемную вставку в Postgresql от node.js?
- 7. Действительно ли sort_by_key вызывает блокирующий вызов?
- 8. Есть ли способ блокировки ввода в Node.js?
- 9. Блокирующий вызов Javascript
- 10. Как сделать синхронный запрос (блокирующий вызов) с помощью node-postgres?
- 11. Есть ли способ «съесть» события в Node.js?
- 12. Есть ли способ сделать вызов AJAX в файл выше public_html?
- 13. Есть ли способ сделать асинхронный вызов gen_server в Erlang?
- 14. Корпоративный брандмауэр, блокирующий MP4s, есть способ обнаружить это в php?
- 15. Есть ли способ сделать (рекурсивный) make -j вызов первой глубиной?
- 16. Есть ли способ сделать асинхронный вызов функции из Python [Django]?
- 17. Есть ли способ сделать это?
- 18. Есть ли способ сделать «обратный». =?
- 19. Есть ли способ сделать это?
- 20. Есть ли способ сделать productsum
- 21. Есть ли способ сделать функцию
- 22. Есть ли способ сделать это?
- 23. Есть ли способ контролировать производительность приложений Node.JS?
- 24. Wrap асинхронный код в блокирующий вызов
- 25. Spray HttpClient Синхронный/блокирующий вызов
- 26. Есть ли способ сделать перемещенный объект «недействительным»?
- 27. Есть ли способ отследить вызов функции javascript?
- 28. Есть ли способ сделать это неявным образом?
- 29. Есть ли способ сделать этот код потокобезопасным?
- 30. GWT Сделать синхронный/блокирующий вызов с использованием обратного вызова Asynchronus
Вы можете использовать модуль, например 'async', чтобы управлять цепочкой обратного вызова. – Joe
Если все, что вы делаете, это доступ к файловой системе, то вы можете использовать синхронные функции в модуле 'fs'. В противном случае нет механизма для создания асинхронного функционального блока. Как упоминает @Joe, вам следует более эффективно работать над управлением обратными вызовами. Это не сложно или сложно, когда вы привыкли к этому. – qubyte