我有一项服务,需要先将图片上传到Firebase存储并返回downloadurl。获取下载网址后,我需要将其存储到Firebase实时数据库中。使用Firebase在Angular 2中进行同步呼叫
但这里的问题是Firebase调用是异步的。
这是我的代码:
addCategory(category){
let storageRef = firebase.storage().ref(`category/${category.img_name}`);
//Upload file
storageRef.put(category.url)
.then((snapshot) => {
// Here i will get download url
var downloadUrl = snapshot.downloadURL;
category.category_icon = downloadUrl.toString();
})
//Problem occurs here return is executed before .then statement and my download url becomes undefined.
return this.http.post('https://app_name.cloudfunctions.net/api/products',body,{headers:headers})
.map(res =>res.json());
}
所以,我需要知道是否有可能停止生产此调用(storageRef.put())的同步,这样我return语句应该只完成后触发。 put()调用。
在此先感谢!
是啊!我也尝试过。但是我调用这个服务函数addCategory(category)的组件是期待Return语句。所以我不能让http发布内部.then()。如果我写这么不行。因为我的调用函数使用。订阅 –
@PraveenCool不会期望返回声明。直到你这样做,你将无法解决你的问题。你应该让它期望它可以链接的承诺。 –
我更新我的答案看一看 –