Не возвращать что-либо из Promise и работать в NodeJS

Ответ второго jdk: любой публичный статический член любого класса вашего приложения можно рассматривать как «глобальную переменную».

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

0
задан anny123 18 January 2019 в 07:08
поделиться

1 ответ

И, возможно, если мы создадим обещание и не разрешим его, это приведет к утечке памяти?

Только если кто-то будет висеть на возвращенном обещании, ожидая, что оно разрешится. .

Но это то же самое для .then (), т.е. если мы ничего не возвращаем в нашем .then и аналогично, если мы вызываем функцию, которая устанавливает такие вещи, как res.status () и отправляет res.send () [ 1116]

Ничего не возвращать из обработчика .then() - это прекрасно, если пользователь обещания не ожидает разрешенного значения. Это просто оставляет разрешенное значение обещания как undefined.

Рассмотрим этот маршрут Api и Middleware

Это прекрасно. Вы используете .then() и .catch(), чтобы узнать, когда выполняется асинхронная операция, и затем вы отправляете ответ в любом случае. Ничто не использует последнее обещание, поэтому не имеет значения, какова его разрешенная ценность.

Это [errorStatusCodeAndResponseEventbriteLoggedInUser function] нормально?

Это немного странно и имеет некоторые проблемы. Это будет генерировать предупреждения о необдуманных отклонениях в некоторых реализациях. Похоже, что вы делаете что-то вроде запуска и забывания, когда звоните FirebaseHelper.updateDataInDb(), где вы ничего не делаете с результатом, независимо от того, успешен он или нет. Мне не ясно, почему или каково ваше намерение для этого. Если это просто какая-то запись в журнале, то, возможно, я мог бы понять (я бы все равно поставил .then() на него, а не throw из .catch(), когда ничего не слушал). Но, если это не предполагается реализацией «забыл и забыл», вы продолжаете, не дожидаясь завершения операции.

И, наконец, в моем токене обновления встречи .then() я ничего не возвращаю.

Как я уже говорил выше, единственное время, когда не возвращается что-то из обработчика .then(), это проблема, когда кто-то использует возвращенное обещание и ожидает разрешенного значения. Если вызывающая сторона не ожидает разрешенного значения, возвращать его не нужно. Разрешенное значение будет просто undefined, что прекрасно в Javascript.

Эта конструкция:

 .catch(err => {throw err}) 

бессмысленна. Ваш код работает так же без этого. Либо сделайте что-нибудь полезное в обработчике .catch(), либо опустите его и дайте ему возможность обратиться к вызывающей стороне.

Кроме того, в вашей последней функции вы снова не дожидаетесь завершения FirebaseHelper.updateDataInDb(), так что это по сути новая цепочка обещаний без связи, которая действует в режиме «забей и забудь». Это может создать предупреждения для необоснованных отклонений. Как правило, это не очень хорошая практика, так как молча терпит неудачу, и никто никогда не узнает об этом и ничего не ждет.

0
ответ дан jfriend00 18 January 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: