2016-11-07 3 views
1

Один из самых полезных функций в том, что он asynchronous из-за того, что я читаю, однако, как новичок до NodeJS, это путают, почему такие модули, как async, существуют, если это уже обрабатывается изначально?Nodejs Асинхронное программирование - зачем нужен модуль «асинхронный»? Что такое «Callback Hell»/«Pyramid of Doom»?

https://www.npmjs.com/package/async

Я предполагаю, что есть хорошая причина, но это не очевидно для меня. Должен ли он обрабатывать callback hell или Pyramid of Doom.

+1

Я понятия не имею, что вы имеете в виду, говоря «nodejs является асинхронным из коробки». Я не знаю, что значит говорить, что любой язык или реализация являются «асинхронными». Вы имеете в виду, что некоторые функции JS, такие как функции первоклассных объектов, которые могут использоваться как обратные вызовы или неблокирующие операции ввода-вывода, поддаются асинхронному программированию? Где вы это читали? –

+0

@torazaburo https://www.codementor.io/codeforgeek/manage-async-nodejs-callback-example-code-du107q1pn – sonance207

+0

Это примерно похоже на высказывание: «ветчина - это еда из коробки, так зачем мне сделать сендвич?". –

ответ

2

При использовании асинхронного программирования в NodeJS, вы можете завершить с помощью Callback Hell или Pyramid of Doom, если у вас есть еще несколько асинхронных функций, которые будут вызываться один за другим, как показано ниже.

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

Если у вас больше числа асинхронных функций в цепочке или внутри большого цикла, вам, возможно, придется передать одинаковое количество обратных вызовов, чтобы узнать о завершении каждой операции, а последнее - выполнить другие вещи, например, вернуть ответ и т. д.

Когда вы кодируете их с большим количеством обратных вызовов, становится очень сложно управлять/поддерживать и не иметь лучшей читаемости, как показано ниже.

getData(function(a){ 
    getMoreData(a, function(b){ 
     getMoreData(b, function(c){ 
      getMoreData(c, function(d){ 
       getMoreData(d, function(e){ 
        ... 
       }); 
      }); 
     }); 
    }); 
}); 

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

В любом случае, это чисто до вас, чтобы пойти с callback hell или другими модулями.

Чтобы попасть в более глубокие идеи,

https://strongloop.com/strongblog/node-js-callback-hell-promises-generators/

+0

'callback hell' или' пирамида гибели '- Я забыл упомянуть тех: p –

+0

@JaromandaX, да, вы правы :-) – Aruna

+0

@Aruna Спасибо – sonance207

7

Прочитать описание:

Асинхронный представляет собой модуль утилита, которая обеспечивает прямой вперед, мощные функции для работы с асинхронным JavaScript.

Он не «обеспечивает» асинхронные функции, он предоставляет функции для работы с асинхронным javascript.

Примечание: javascript is не все асинхронные, только асинхронные части являются асинхронными.

Иначе путь

асинхронные не делает nodejs асинхронными, он делает с помощью асинхронного кода проще через сахар с покрытием благости

+0

Я понимаю, что javascript не является асинхронным, но runtime nodejs, так почему я должен использовать асинхронный модуль в nodejs? – sonance207

+0

'но время выполнения nodejs''? асинхронный? где вы это читали? Кроме того, вы явно не понимаете, что библиотека 'async' предоставляет функции ** для работы с асинхронным javascript ** - она ​​предоставляет простые« сахаровые »функции для обычных асинхронных« шаблонов » –

+0

Я нашел здесь http: // stackoverflow. com/questions/10570246/what-is-not-blocking-or-asynchronous-io-in-node-js? noredirect = 1 & lq = 1, и снова этот вопрос направлен только на nodejs, а не на vanilla ** javascript ** – sonance207

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