Итак, в моей облачной функции у меня есть этот фрагмент кода:
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, и если да, то на что мне его изменить?
Будет ли проблемой, если я оставлю его как возвращаемое значение null, и если да, то на что мне его изменить?
Это действительно зависит от логики вызывающего абонента или от того, какой должна быть логика вызывающего абонента. Когда вы делаете return null;
там, вы говорите, что в этом конкретном пути кода вы хотите, чтобы разрешенное значение обещания, которое вы вернули из этой функции, было null
. Это было бы прекрасно, если бы:
null
или какое-либо другое ложное значение и действует соответствующим образом. Например, некоторые интерфейсы баз данных будут возвращать что-то вроде null
, если вы запросите что-то, а результаты не будут найдены. Это не ошибка, это просто сообщение о том, что результаты поиска не найдены.Что касается замены на что-то вроде return Promise.reject("text")
, это дает совершенно другой результат. Это заставляет этот конкретный путь кода отклонить обещание, которое он возвращает, что приведет к значительно другому поведению для вызывающей стороны. Обычно вы делаете это только в том случае, если это состояние ошибки, и вы хотите сообщить о такой ошибке вызывающему абоненту, и вы ожидаете, что он обработает эту ошибку в .catch()
или try/catch
(if using
await`).
Кроме того, вы обычно не отклоняете строку. Обычно вы отказываетесь с помощью объекта Error
.
Извините, что отвечаю спустя долгое время. Так что да, в этом случае вызывающая сторона не заботится ни о каких возвращаемых значениях. Единственная причина, по которой я должен что-то возвращать, в первую очередь, как я уже сказал, из-за оператора if, в котором, если он истинен, я возвращаю обещание от моей функции manage
, чтобы поддерживать работу облачной функции. Поэтому мне все равно, является ли оператор if ложным, поэтому мне просто нужно что-то вернуть в операторе else (в моем случае null). Я думал, что это не будет проблемой, но я мог бы просто спросить, потому что я все еще новичок в машинописи. Спасибо за ответ.
Трудно сказать, не видя, как этот код вписывается в контекст всей функции, или не понимая, что функция должна делать при достижении нулевого значения. Пожалуйста, отредактируйте вопрос, чтобы он был более полным.