Вопрос о возврате нулевого значения в обратном вызове обещания в облачных функциях Firebase

Итак, в моей облачной функции у меня есть этот фрагмент кода:

return users_pending_update.once('value').then((snapshot) => {
    if (snapshot.exists()) {
        return manage(ref_date, zonesYetToBeUpdated, snapshot);
    } else {
        return users_tzs_ref.once('value').then((snapshot) => {
            if (snapshot.exists()) {
                return manage(ref_date, zonesYetToBeUpdated, snapshot);
            } else {
                return null;
            }
        }).catch((error) => {
            console.error("Getting the list of values from the \"users_tzs\" node failed with error: " + error);
        });
    }
}).catch((error) => {
    console.error("Getting the list of values from the \"users_pending_update\" node failed with error: " + error);
});

Мой вопрос касается оператора return null, который вы можете увидеть в коде. Единственная причина, по которой он у меня есть, заключается в том, что я получал предупреждение о том, что не все пути кода возвращают значение. Мне не нужен и не волнует этот путь вон там. Предупреждение также исчезает, если я использую что-то вроде return Promise.reject("text"). Будет ли проблемой, если я оставлю его как возвращаемое значение null, и если да, то на что мне его изменить?

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

Doug Stevenson 26.12.2020 02:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
159
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Будет ли проблемой, если я оставлю его как возвращаемое значение null, и если да, то на что мне его изменить?

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

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

Что касается замены на что-то вроде return Promise.reject("text"), это дает совершенно другой результат. Это заставляет этот конкретный путь кода отклонить обещание, которое он возвращает, что приведет к значительно другому поведению для вызывающей стороны. Обычно вы делаете это только в том случае, если это состояние ошибки, и вы хотите сообщить о такой ошибке вызывающему абоненту, и вы ожидаете, что он обработает эту ошибку в .catch() или try/catch(if usingawait`).

Кроме того, вы обычно не отклоняете строку. Обычно вы отказываетесь с помощью объекта Error.

Извините, что отвечаю спустя долгое время. Так что да, в этом случае вызывающая сторона не заботится ни о каких возвращаемых значениях. Единственная причина, по которой я должен что-то возвращать, в первую очередь, как я уже сказал, из-за оператора if, в котором, если он истинен, я возвращаю обещание от моей функции manage, чтобы поддерживать работу облачной функции. Поэтому мне все равно, является ли оператор if ложным, поэтому мне просто нужно что-то вернуть в операторе else (в моем случае null). Я думал, что это не будет проблемой, но я мог бы просто спросить, потому что я все еще новичок в машинописи. Спасибо за ответ.

Veselin Zinkov 26.12.2020 23:58

Другие вопросы по теме