Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic+Javascript:如何使用Firebase创建承诺_Javascript_Firebase_Ionic Framework_Firebase Realtime Database_Ionic3 - Fatal编程技术网

Ionic+Javascript:如何使用Firebase创建承诺

Ionic+Javascript:如何使用Firebase创建承诺,javascript,firebase,ionic-framework,firebase-realtime-database,ionic3,Javascript,Firebase,Ionic Framework,Firebase Realtime Database,Ionic3,我有一个简单的doRegisterUser函数,它基本上使用提供者中定义的函数来检查用户名是否已经注册。在下面的代码中,我打印到控制台,调用提供者的函数,然后打印到控制台。我这么做只是为了观察执行的顺序。我想要的是执行checkUsernameReserved,然后执行任何控制台打印 如何做到这一点 doRegisterUser() { var self = this; /*Step A - Check username provided by user is t

我有一个简单的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执行之后 使用用户名 两件事:

从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");
        }
    });
}