我在身份验证提供程序中有一个getUser方法(在Ionic 2中工作):
getUser(uid: string): any {
var toReturn;
firebase.database().ref('/userProfile').orderByKey().equalTo(uid).once("value", function(snapshot){
toReturn = snapshot.val();
console.log("getUser = " + JSON.stringify(toReturn));
});
return toReturn;
}
它从Firebase检索用户对象。只要存在console.log,它就可以正确输出输出,并保存在toReturn变量中。
下面是ItemDetailPage类,但是当我记录相同方法的值时,它返回未定义。
import { Component } from '@angular/core';
import { NavParams} from 'ionic-angular';
import { Auth } from '../../providers/auth/auth';
@Component({
templateUrl: 'build/pages/item-detail/item-detail.html',
providers: [Auth]
})
export class ItemDetailPage {
private title;
private description;
private author;
constructor(private navParams: NavParams, private _auth: Auth) {
this.title = this.navParams.get('item').title;
this.description = this.navParams.get('item').description;
this.author = _auth.getUser(this.navParams.get('item').author);
console.log("item-detail.ts = " + JSON.stringify(this.author));
//_auth.getUser('123');
}
}
我是Angular的新手,并尝试学习,所以这可能是我很想念的很简单的事情。但是,为什么不返回/传递回JSON对象?我需要它来利用从数据库查询的值。
谢谢
您缺少的是Firebase方法正在意外运行。因此,它确实返回了一个承诺而不是一个值。这就是为什么您将返回值作为回调获取的原因。
您应该做的是:在服务中返回Firebase Promise(如果要在将数据返回到控制器之前对数据做一些事情,则返回一个新的Firebase Promise)。然后,您想在控制器中创建一个回调函数。
return firebase.database().ref('/userProfile').orderByKey().equalTo(uid).once("value", function(snapshot){});
// Controller
_auth.getUser(this.navParams.get('item')).then(function(snapshot){
...
});
您应该研究诺言如何在普通javascript中工作:
http://andyshora.com/promises-angularjs-explained-as-cartoon.html
然后如何在NG2样式中使用它们
http://coenraets.org/blog/2016/02/angular2-ionic2-data-services-promises-observables/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句