【问题标题】:Ionic + Javascript: How to create promise with FirebaseIonic + Javascript:如何使用 Firebase 创建承诺
【发布时间】:2018-02-15 19:11:55
【问题描述】:

我有一个简单的 doRegisterUser() 函数,它基本上使用提供程序中定义的函数来检查用户名是否已经注册。在下面的代码中,我打印到控制台,调用提供程序的函数,然后打印到控制台。只是我这样做只是为了观察执行顺序。我想要的是让 checkUsernameReserved() 执行,然后发生任何控制台打印。

如何做到这一点?

doRegisterUser() {
        var self = this;
        /*Step A - Check username provided by user is taken or not. If no username taken, create random username*/
        console.log("Before checkUsernameReserved() execution");



        self.firebaseProvider.checkUsernameReserved(self.username);



        console.log("After checkUsernameReserved() execution");
    }

这是使用 firebase 的提供程序函数:

checkUsernameReserved(username:string): any{
    /*Check usernamesTaken table for provided username*/
    firebase.database().ref('/usernames_taken/' + username).once('value').then(function(snapshot) {

      /*Check if username is taken.*/
      if(snapshot.val() != null && snapshot.val() != "")
      {
        console.log("Username Taken");
      }else{
        console.log("Username Available");
      }
    })
  }

我在控制台中得到的当前输出是:

  • checkUsernameReserved() 执行前
  • checkUsernameReserved() 执行后
  • 使用的用户名

【问题讨论】:

    标签: javascript firebase ionic-framework firebase-realtime-database ionic3


    【解决方案1】:

    两件事:

    • checkUsernameReserved返回你的承诺
    • 将检查后必须运行的代码放入该承诺的.then

    所以:

    doRegisterUser() {
        var self = this;
        /*Step A - Check username provided by user is taken or not. If no username taken, create random username*/
        console.log("Before checkUsernameReserved() execution");
        self.firebaseProvider.checkUsernameReserved(self.username).then(() => {
            // Put code that must run after the check in here...
            console.log("After checkUsernameReserved() execution");
        }); 
    }
    
    checkUsernameReserved(username:string): any{
        /*Check usernamesTaken table for provided username*/
        // !! note the return !!
        return firebase.database().ref('/usernames_taken/' + username).once('value').then(function(snapshot) {
    
            /*Check if username is taken.*/
            if(snapshot.val() != null && snapshot.val() != "") {
                console.log("Username Taken");
            } else {
                console.log("Username Available");
            }
        });
    }
    

    【讨论】:

    • 非常感谢!工作顺利。我将确保阅读更多内容以充分了解我在这种情况下的选择。
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多