关于angularjs:Angularfire集不会返回$ promise

Angularfire set does not return a $promise

当然,我只是从AngularFire和Firebase开始的,但是,它似乎非常透明,并且有据可查。
但是,有一件事对我来说没有意义;

AngularFire具有$ set函数,可用于在后端存储中设置值。根据我的阅读,在1.0.0版中,他们不赞成使用此功能,而现在它只是" set "(不带$符号)。
在我看来,区别在于$ set曾经返回一个promise对象,因此可以链接函数,而新的set函数似乎什么也不返回...

例如,当我有以下代码时:

1
2
3
4
5
6
function createprofile(authData, user){
  return fbutil.ref('profiles/'+authData.uid).set({
    firstname: user.firstname,
    lastname: user.lastname
  });
};

我的fbutil.ref函数如下:

1
2
3
4
5
6
7
8
function firebaseRef(path) {
  var ref = new $window.Firebase(FB_BASEURL);
  var args = Array.prototype.slice.call(arguments);
  if( args.length ) {
    ref = ref.child(pathRef(args));
  }
  return ref;
}

如何使用" createprofile " \\的返回值来执行某些操作?目前,它始终为"未定义"。我希望我可以在执行一个"设置"函数之后进行链结,以确保它在执行其他操作之前确实有效...


您尚未调用AngularFire集(如您所指出的那样,任何AngularFire服务中都没有此名称的方法)。您已经使用Firebase SDK调用了set(),它不会返回promise,但是希望您传递回调。整理一下写数据的基础知识会有所帮助。

1
2
3
4
5
6
7
8
9
10
11
function createprofile(authData, user){
  var def = $q.defer();
  fbutil.ref('profiles/'+authData.uid).set({
    firstname: user.firstname,
    lastname: user.lastname
  }, function(err) {
    if( err ) { def.reject(err); }
    else { def.resolve(); }
  });
  return def.promise;
};

在内部,AngularFire使用makeNodeResolver()实用程序将回调转换为Promise。您可以将其用作上述方法的示例。