im准备更新表格。
我有一个组件和一项服务,该服务正在获取邮政详细信息,并从firebase数据库中获得$ id作为angularfire2 firebaseObjectObservable。
然后致电服务以从pageload ionic 2的firebase存储中获取图像的元数据。
,但在加载页面后可以观察到服务获得结果。因此,形成输入总是空的。
是否可以等待回调获取firebase存储元数据,然后继续?
这是组件
ionViewDidLoad() {
let loading = this.loadingCtrl.create({
spinner: 'hide',
content: 'Loading Please Wait...'
});
loading.present();
this.categories = this.af.database.list('/Categories');
let id = this.navParams.get('id');
this.post = this.af.database.object(`/Posts/${id}`);
this.post.subscribe(snapshot => {
this.uploadImagesService.getMetaData(snapshot.postpicurl).subscribe((metadata:any) =>{
//Set Form values
this.CreatePost.get('title').setValue(snapshot.title);
this.CreatePost.get('content').setValue(snapshot.content);
this.uploadedpic.name = metadata.name;
this.uploadedpic.size = metadata.size;
});
console.log(snapshot);
});
loading.dismiss();
}
这是元数据服务
getMetaData(url:string){
return Observable.create((observer:any) => {
let metaDataRef = firebase.storage().refFromURL(url);
metaDataRef.getMetadata().then(function(metadata) {
// Metadata now contains the metadata for 'images/forest.jpg'
observer.next(metadata);
//observer.complete(metadata);
}).catch(function(error){
observer.error(error);
});
});
i这样解决。因为我了解到Firebase总是返回承诺。
getMetaData(url:string){
return new Promise((resolve, reject) => {
let metaDataRef = firebase.storage().refFromURL(url);
const getmetadata = metaDataRef.getMetadata().then(resolve, reject);
getmetadata.then((metadata:any) =>{
resolve(metadata);
},(error:any) =>{
reject(error);
});
});
}