Angularfire 设置没有 return $promise

Angularfire set does not return a $promise

诚然,我刚开始使用 AngularFire 和 Firebase,但是,它看起来很透明,而且有据可查。 然而,有一件事对我来说没有意义;

AngularFire 有一个 $set 函数,可用于在后端存储中设置值。据我所知,在 1.0.0 版中他们弃用了这个函数,现在它只是 "set"(没有 $ 符号)。 在我看来,不同之处在于 $set 曾经 return 一个 promise 对象,因此可以链接函数,而新的 set 函数 return 似乎什么都没有...

例如,当我有这个代码时:

function createprofile(authData, user){
  return fbutil.ref('profiles/'+authData.uid).set({ 
    firstname: user.firstname, 
    lastname: user.lastname 
  });
};

而我的fbutil.ref函数如下:

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" 的 return 值进行操作?目前,它始终是 "undefined"。我希望我可以在 "set" 函数之后链接以确保它在执行其他操作之前确实有效...

您还没有调用 AngularFire 集(这里 no method by this name in any AngularFire service, as you've noted). You've called set() using the Firebase SDK, which does not return a promise, but expects you to pass in a callback. Brushing up on fundamentals of writing data 会有所帮助。

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() utility to convert callbacks to promises. You could use that as an example