Возврат не работает внутри функции (снимок)

1
function isDisplayNameTaken(name) {
  firebase
    .database()
    .ref()
    .child("users")
    .orderByChild("username")
    .equalTo(name)
    .once("value")
    .then((snapshot) => {
      return snapshot.exists();
    });
}

Я пытался проверить, находится ли имя пользователя уже в базе данных до регистрации пользователя, но возврат не работает, и что-либо внутри функции (моментальный снимок) не изменяет другие глобальные переменные, чтобы обойти его.

if(isDisplayNameTaken($userDisplayNameField.val())) {
  numberOfChecksPassed += 1
}

Это условие не проходит. Я провел мое исследование и пытался решить проблему в течение последних 5 часов. заранее спасибо

Теги:
firebase

1 ответ

1
Лучший ответ

Во-первых, вы не можете использовать результаты обещаний, поскольку вы пытаетесь выполнить простой оператор if. Вы должны сделать следующее:

isDisplayNameTaken($userdisplayNameField.val()).then(taken => {
    console.log('Is it taken?', taken);
});

В вашем примере с простым if - оператор if проверяет объект обещания как условный, а не разрешенный.

Чтобы это сработало, isDisplayNameTaken нужно будет вернуть обещание (а это не так).

function isDisplayNameTaken(name) {
  return firebase // Notice the return here.
    .database()
    .ref()
    .child("users")
    .orderByChild("username")
    .equalTo(name)
    .once("value")
    .then((snapshot) => {
      return snapshot.exists(); // This return will resolve the promise but you are not returning the resolved promise out of the function.
    });
}
  • 0
    Спасибо, Джим!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню