Typescript 爱奥尼亚3&;Firebase-嵌套可观测对象的正确方法

Typescript 爱奥尼亚3&;Firebase-嵌套可观测对象的正确方法,typescript,firebase,ionic-framework,rxjs,Typescript,Firebase,Ionic Framework,Rxjs,是否有一种更实用的方法将这些观测值嵌套在RX/JS中。这里是一个片段,我首先存储一个图像,然后返回下载URL并将其放入实时数据库 return new Observable(observer => { firebase.storage().ref().child('users/' + this.userService.getUserID() + '/messages/').put(image).then((data) => { updates['

是否有一种更实用的方法将这些观测值嵌套在RX/JS中。这里是一个片段,我首先存储一个图像,然后返回下载URL并将其放入实时数据库

return new Observable(observer => {
        firebase.storage().ref().child('users/' + this.userService.getUserID() + '/messages/').put(image).then((data) => {

          updates['photoURL'] = data.downloadURL;

          firebase.database().ref().update(updates).then(() => {
            observer.next();
            observer.complete();
          }).catch((error) => {
            observer.error(error);
          })
        }, (error) => {
          observer.error(error);
        })
      });

您可以使用高阶观测值并内联相互依赖的操作。例如:

function uploadImageAndUpdateState(userId, image, updates) {
  return Observable.defer(() => firebase.storage().ref().child(`users/${userId}/messages/`).put(image))
    .mergeMap(imagePutData => {
      updates['photoURL'] = imagePutData.downloadURL;
      return firebase.database().ref().update(updates;
    });
});

通过在图像上使用
Defer()
,该可观察对象将在订阅
uploadImageAndUpdateState
上传图像后开始,在接收到来自该操作的数据后,修改
更新
并在firebase中进行更新。由于您的示例不包含错误处理(仅包含传播),因此此函数中不会执行此操作,因此您仍然需要在
subscribe(..,onError=>?)中自己处理此操作
逻辑。

代码片段中的代码是否存在潜在的缺点或不必要的行为?每个问题片段的代码缺点:没有取消支持,由于使用了低抽象方法(
新的Observable
/
Observable.create()
vs
Observable.from()
/
可观察。延迟()
/…如果只是对firebase的单一调用,那么本教程中的低级方法是否可以接受?即使
可观察。创建
首选前者。但这只是语法。它会起作用。正如我在前面的评论中所述,如果您应该使用mo,您不会从可观察中获得所有好处您可以使用合适的函数来组成您搜索的行为。对于更一般的情况,嵌套三个firebase调用或N个api调用时,是否有需要遵循的模式?