Мы только что узнали о Callback Hell и о том,
как обещания могут помочь нам преодолеть эту проблему.
Мы знаем, что драйвер узла MongoDB изначально поддерживает обещания.
Таким образом, если вы не укажете обратный вызов,
вызовы их функций вернут обещания.
Итак, мы собираемся обновить наше приложение, чтобы использовать обещания, чтобы
избежать проблемы обратного вызова, о которой мы только что узнали в предыдущей лекции.
Возвращаясь к нашему приложению,
снова взглянув на причину обратного вызова в нашем коде.
Обратите внимание, что здесь, когда
мы реализовали операции, у нас есть одна операция, а
затем внутри обратного вызова этой операции, тогда нам нужно инициировать следующую операцию и внутри
обратного вызова этой операции мы инициируем следующую операцию и так далее.
Таким образом, вы заканчиваете этой пирамидой, как структура здесь.
Одна операция внутри обратного вызова другого и внутри обратного вызова.
Теперь этот код довольно скоро станет громоздким и сложным для понимания.
Вот почему мы хотим преобразовать этот код, используя
поддержку обещаний, которые Mongo DB Driver уже предоставляет
для нас, чтобы мы могли вместо этого использовать обещания,
а не использовать функции обратного вызова, как мы делали в этом упражнении.
Конечно, я сделал предыдущую версию, чтобы проиллюстрировать вам, как мы можем
приземлиться с обратным вызовом ад и как мы можем использовать обещания, чтобы преодолеть эту проблему.
Итак, прежде чем мы обновим файл index.js,
позвольте мне перейти в operations.jsfile, а затем мы сначала обновим это.
Итак, здесь вы заметите, что когда мы вызываем эту функцию здесь,
мы передаем второй параметр, который является функцией обратного вызова здесь.
Так что, потому что мы будем использовать обещания здесь.
Поэтому я просто удалю эту функцию обратного вызова, а затем,
поскольку этот вызов вставки будет в любом случае возвращать обещания,
я просто собираюсь вернуть обещание из этой функции.
Итак, обратите внимание, как код был упрощен.
Аналогично для второго
я просто удалю эту функцию обратного вызова, а
затем верну обещание,
которое возвращается этим, а затем мы будем обрабатывать это в коде в index.js.
Аналогично для удаления также
я собираюсь удалить обратный вызов, а затем вернуть этот сбой, а также для uptade.
Для обновления мы собираемся удалить обратный вызов, который мы дали
здесь, а затем вернуть обещание.
Таким образом, все эти четыре функции
будут возвращать обещание, которое уже возвращено
этими вызовами функций драйвера MongoDB.
Теперь, как только мы закончим это,
давайте вернемся к index.js.
В index.js я собираюсь снова обновить эту функцию здесь.
Таким образом, использование обещаний скажет MongoClient.connect (url), а затем
мы заменим это, сказав «тогда», и это получает только db в качестве своего параметра.
И внутри здесь, мы будем обрабатывать остальное, а также
мы можем заметить, что эта конкретная функция закрывает «Тогда» здесь и
обещание, вторая часть обещания,
мы можем справиться с ошибкой.
Можно сказать Consolelog.
Таким образом, мы можем использовать уловы обещания также, чтобы поймать ошибки.
Таким образом, мы поймали ошибки.
Теперь давайте улучшим код внутри.
Поэтому внутри здесь мы делаем документ вставки операции БД,
и вместо вызова этой функции здесь
я собираюсь сделать это превратить это в «тогда» здесь.
Так что я собираюсь закрыть это и сказать. Тогда результат.
Поэтому внутри этого результата
мы собираемся распечатать журнал консоли, а затем.
Так что я собираюсь закрыть это здесь, а затем мы
закроем «тогда» здесь, а затем
это будет прикреплено к снова «тогда» здесь.
Итак, вы видите, что я цепляю два «thens»
один в другой здесь, а затем внутри нас, тогда
мы сделаем консольный журнал, а затем сделаем возврат следующей операции.
Но затем, для этой операции,
я собираюсь закрыть это и закрыть это
тогда, а затем этот вызов снова будет
обрабатываться внутри функции «then» здесь.
Поэтому обратите внимание, как у вас есть первая функция, и в «тогда» мы вызываем
документы dboper find, и это вернет обещание.
Это обещание будет выполнено этим тогда.
Итак, мы цепим две вещи вместе, а затем снова приковываем еще одно «потом» здесь.
Позвольте мне изобрести код здесь, а затем мы вернем это здесь, и
это снова закроет и
закроет, что «тогда», а затем это
будет заключено внутри следующего «тогда», и мы назовем следующую функцию здесь «что
db.dropCollection («Блюда» и закрыть «это то» и следующий здесь.
Мы будем обрабатывать «тогда» результата здесь.
Верните dbclose, и все
это здесь теперь можно удалить, потому что они больше не нужны.
И тогда, наконец, если есть ошибка, поймает ошибку этой функции.
Поэтому я просто скопирую это, а затем вставьте его здесь. Вот оно.
С этим изменением теперь
ваш код намного проще обрабатывать здесь.
Таким образом, как вы можете видеть,
у вас есть MongoClient.Connect, который
возвращает обещание и внутри обработки этого обещания,
они вызывают эти методы, и один за другим они
возвращают обещание, а затем вы связываете их с помощью.
Эта структура аккордов гораздо легче следовать, чем то, что мы реализовали ранее.
Таким образом, используя обещания, мы буквально перевернули его, а затем избежали
обратного ада, который мы видели в более ранней версии этого приложения.
Итак, давайте сохраним изменения как
index.jsn.operation.js, а затем взглянем на это приложение.
Опять же, перейдя
на терминал, в командной строке введите «npm
start», и вы увидите, что ваше приложение работает точно так, как раньше
, оно вставляет документ, находит
документ, обновляет документ, а затем находит
обновленный документ, а затем закрывает базу данных акта.
Таким образом, используя обещания, мы реструктурировали код, чтобы быть намного проще и
избежать обратного ада, который мы видели в предыдущей версии этого приложения.
С этим мы завершаем это упражнение.
В этом упражнении вы видели, как мы можем использовать
обещания, чтобы избежать обратного ада.
Это хорошее время для вас, чтобы сделать git фиксацию с
обратным вызовом сообщения ад и обещание.