Firebase.set失败:第二个参数必须是有效的函数

时间:2015-04-10 11:44:52

标签: firebase angularfire

关注Lynda.com使用angular和Firebase构建数据驱动的应用程序。 当我尝试使用set()的寄存器功能时,我收到上述消息。 set()仍然在angularfire API中。我试过搜索SO和文档,但找不到答案。

authentication.js

myApp.factory('Authentication', function($firebase, 
  $firebaseAuth, $routeParams, $location, FIREBASE_URL) {

  var ref = new Firebase(FIREBASE_URL);
  var auth = $firebaseAuth(ref);

  //Temporary object
  var myObject = {

    login: function(user) {
      return auth.$authWithPassword({
        email: user.email,
        password: user.password
      }); //authWithPassword
    }, //login

    register: function(user) {
      return auth.$createUser({
        email: user.email,
        password: user.password
      }).then(function(regUser) {
        var firebaseUsers = new Firebase(FIREBASE_URL+'users');

        var userInfo = {
          date : Firebase.ServerValue.TIMESTAMP,
          regUser : regUser.uid,
          firstname: user.firstname,
          lastname : user.lastname,
          email: user.email
        }; //user info

        firebaseUsers.set(regUser.uid, userInfo); //**ERRORS HERE**
      }); //promise
    } //register

  }; //myObject
  return myObject;
}); //myApp Factory

1 个答案:

答案 0 :(得分:0)

此处记录了Firebase的set方法:https://www.firebase.com/docs/web/api/firebase/set.html。这很明确:

  

onComplete Function * optional

     

与Firebase服务器同步完成后将调用的回调函数。回调将在失败时传递一个Error对象;否则为空。

因此第二个(可选)参数是在服务器上设置值时将调用的函数。如果你从教程中复制了那些确切的代码,你应该联系作者并询问他们的意思。

他们更可能想要做的是将用户数据设置在子节点中。为此,用以下方法替换有问题的行:

firebaseUsers.child(regUser.uid).set(userInfo);