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。您可以将其用作上述方法的示例。