Сложный принцип проектирования Node Js (Promise, async / await) - PullRequest
0 голосов
/ 16 мая 2019

Это обычный процесс для меня в моих предыдущих работах, поэтому у меня обычно очень сложный сценарий использования, например

async function doThis(){
  for (100x) {
     try {
       insertToDatabase()
       await selectAndManipulateData()
       createEmailWorker()
       /** and many more **/
     } catch {
       logToAFile()
     }
  }
}

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

Что я хочу знать, так это какая архитектура лучше всего подходит для определения структуры проекта, которая не жертвует целостностью данных? (или это уже достаточно хорошо?)

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

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

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

0 голосов
/ 16 мая 2019
const doThis = async() => {
  try {
     for (100x) {
       await insertToDatabase();
       await selectAndManipulateData();
       await createEmailWorker();
       /** and many more **/
     }
  }
  catch {
    await logToAFile();
  }
}

Лучший способ сделать это, вы всегда должны использовать await для вызова любой функции и убедитесь, что с синтаксисом es6 это дает намного больше возможностей. Ваша функция всегда должна быть асинхронной. Всегда помещайте ваш цикл в try catch, так как он даст вам любую ошибку в catch и вызовет специфичную функцию.

...