Выпуск сСрвСрной JavaScript-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js 14.0

Бостоялся Ρ€Π΅Π»ΠΈΠ· Node.js 14.0, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для выполнСния сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Node.js 14.0 относится ΠΊ Π²Π΅Ρ‚ΠΊΠ°ΠΌ с Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сроком ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ статус Π±ΡƒΠ΄Π΅Ρ‚ присвоСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² октябрС, послС провСдСния стабилизации. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Node.js 14.0 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎ апрСля 2023 Π³ΠΎΠ΄Π°. Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ LTS-Π²Π΅Ρ‚ΠΊΠΈ Node.js 12.0 продлится Π΄ΠΎ апрСля 2022 Π³ΠΎΠ΄Π°, Π° ΠΏΠΎΠ·Π°ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ LTS-Π²Π΅Ρ‚ΠΊΠΈ 10.0 Π΄ΠΎ апрСля 2021 Π³ΠΎΠ΄Π°. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ 13.x Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π² июнС этого Π³ΠΎΠ΄Π°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ:

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π»Π΅Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ наступлСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… событий диагностичСских ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ события, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ диагностикС Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΊΠ°ΠΊ ΠΊΡ€Π°Ρ…ΠΈ, ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, большая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° CPU, Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ошибок ΠΈ Ρ‚.ΠΏ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° API Async Local Storage с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ класса AsyncLocalStorage, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для создания асинхронного состояния с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π½Π° Π±Π°Π·Π΅ callback-Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ promise. AsyncLocalStorage позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ web-запроса, напоминая Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (Thread-Local Storage) Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.
  • Π£Π±Ρ€Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ прСдупрСТдСния ΠΎΠ± ΡΠΊΡΠΏΠ΅Ρ€ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ возмоТности ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ECMAScript 6 ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΈ экспортируСмых ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ import ΠΈ export. ΠŸΡ€ΠΈ этом сама рСализация ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ESM ΠΏΠΎΠΊΠ° остаётся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ.
  • Π”Π²ΠΈΠΆΠΎΠΊ V8 ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ Π΄ΠΎ вСрсии 8.1 (1, 2, 3), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ внСсСны Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°, ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ логичСский ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ объСдинСния «??» (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, Ссли Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL ΠΈΠ»ΠΈ undefined, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚), ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «?.» для Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ всСй Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ свойств ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ «db?.user?.name?.length» Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ), ΠΌΠ΅Ρ‚ΠΎΠ΄ Intl.DisplayName для получСния Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΈ Ρ‚.ΠΏ.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° рСвизия API Streams, нацСлСнная Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ согласованности API-интСрфСйсов Streams ΠΈ устранСния Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… частСй Node.js. НапримСр, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ http.OutgoingMessage ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΎ ΠΊ stream.Writable, Π° net.Socket ΠΊ stream.Duplex. ΠžΠΏΡ†ΠΈΡ autoDestroy ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выставлСна Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «true», ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹Π·ΠΎΠ² «_destroy» послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° API WASI (WebAssembly System Interface), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы для прямого взаимодСйствия с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой (POSIX API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, сокСтами ΠΈ Ρ‚.ΠΏ.).
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Ρ‹ трСбования ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ вСрсиям компиляторов ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ: macOS 10.13 (High Sierra), GCC 6, Windows Π½ΠΎΠ²Π΅Π΅ 7/2008R2.

Напомним, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована ΠΊΠ°ΠΊ для сСрвСрного сопровоТдСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ для создания ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… клиСнтских ΠΈ сСрвСрных сСтСвых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Node.js ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π° большая коллСкция ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ сСрвСров ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ web-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ WebSocket ΠΈ Ajax, ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊ Π‘Π£Π‘Π” (MySQL, PostgreSQL, SQLite, MongoDB), ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, CSS-Π΄Π²ΠΈΠΆΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ систСм Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (OAuth), XML-парсСры.

Для обСспСчСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ большого числа ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов Node.js задСйствуСт Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ модСль запуска ΠΊΠΎΠ΄Π°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ callback-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π’ качСствС способов ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ соСдинСний ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ epoll, kqueue, /dev/poll ΠΈ select. Для ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ соСдинСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libuv, которая являСтся надстройкой Π½Π°Π΄ libev Π² систСмах Unix ΠΈ Π½Π°Π΄ IOCP Π² Windows. Для создания ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (thread pool) задСйствована Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libeio, для выполнСния DNS-запросов Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ c-ares. ВсС систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сигналов, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» (pipe). Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JavaScript-ΠΊΠΎΠ΄Π° обСспСчиваСтся Ρ‡Π΅Ρ€Π΅Π· задСйствованиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google Π΄Π²ΠΈΠΆΠΊΠ° V8 (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Microsoft Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Node.js с Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Chakra-Core).

По своСй сути Node.js ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Perl AnyEvent, Ruby Event Machine, Python Twisted ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ событий Π² Tcl, Π½ΠΎ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий (event loop) Π² Node.js скрыт ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ событий Π² web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. ΠŸΡ€ΠΈ написании ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для node.js Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ спСцифику событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вмСсто выполнСния «var result = db.query(«select..»);» с ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Π² Node.js ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ асинхронного выполнСния, Ρ‚.Π΅. ΠΊΠΎΠ΄ трансформируСтся Π² «db.query(«select..», function (result) {ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°});», ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚ ΠΊ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ поступлСния Π΄Π°Π½Π½Ρ‹Ρ…. .

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru