Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 将4个角度2个观测值合并为1个_Angular_Firebase_Firebase Realtime Database_Angularfire2 - Fatal编程技术网

Angular 将4个角度2个观测值合并为1个

Angular 将4个角度2个观测值合并为1个,angular,firebase,firebase-realtime-database,angularfire2,Angular,Firebase,Firebase Realtime Database,Angularfire2,这是我的新应用 角度火力2+火力基础 getErros(开始,结束):FirebaseListObservable{ this.lista=this.db.list('/erros/geral',{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }); this.lista2=this.db.list(“/erros/utilsst”{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }); th

这是我的新应用

角度火力2+火力基础

getErros(开始,结束):FirebaseListObservable{
this.lista=this.db.list('/erros/geral',{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.lista2=this.db.list(“/erros/utilsst”{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.lista3=this.db.list('/erros/utilfac'{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.lista4=this.db.list('/erros/geral',{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.listafinal=(this.lista&&this.lista2&&this.lista3&&this.lista4);
返回此.listafinal;
}
从firebase进行简单的数据搜索,但无法使其工作。有没有办法做到这一点


不能让它工作。仅从该列表接收数据。列表4

我建议使用
CombineTest
。使用此运算符,您可以将所有四个组合为单个可观察对象,如果任何一个可观察对象发生更改,这将生成一个新值

Observable.combineLatest(
  this.db.list('/erros/geral',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
  this.db.list('/erros/utilsst',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
  this.db.list('/erros/utilfac',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
      this.db.list('/erros/utilatas',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      })

)
.map(([geral, utilsst, utilfac, utilatas]: [any, any, any, any]) =>
  ({ geral, utilsst, utilfac, utilatas }) // Do add operation here.
)

我对代码做了一些修改

从'@angular/core'导入{Injectable};
从“angularfire2/database”导入{AngularFireDatabase,FirebaseListObservable};
从'rxjs/Rx'导入{Observable};
从“rxjs”导入*作为Rx;
@可注射()
出口级采购服务{
构造函数(专用数据库:AngularFireDatabase){
}
嘿
GetErrors(开始、结束):FirebaseListObservable{

this.hey=可观察的.combineLatest( 这个.db.list('/erros/geral'{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }), 此.db.list(“/erros/utilsst”{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }), 此.db.list(“/erros/utilfac”{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }), 此.db.list(“/erros/utilatas”{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }) ) .map([geral,utilsst,utilfac,utilatas]:[any,any,any,any])=>{let erro=[geral,utilsst,utilfac,utilatas];console.log(erro);return erro;}) 把这个还给我; }
}
this.listafinal=(this.lista&&this.lista2&&this.lista3&&this.lista4)从4个不同的路径获取数据。然后把它全部发送到一个地方,你想把四个可观察的组合成一个可观察的?如果你看看数据库,有四个不同的路径。我想经历这一切。所以是的,我想把4个观测值合并成一个,我想……你会遇到一个异步问题;如果在/geral中返回10000个节点,在/utilfac中返回3个节点,那么从/geral获得结果的时间将更长。因此,在返回所有数据之前“组合”节点将是一个问题。您需要允许Firebase在使用数据之前返回数据。我应该返回什么?将返回语句添加到Observable
return Observable.CombineTest(
this.hey=Observable.CombineTest(|),然后返回此。Heyther有一个错误。错误:找不到不同的支持对象“[object object]'的类型为'object'。NgFor仅支持绑定到诸如数组之类的Iterables。请执行控制台日志并向我显示输出。我认为在映射中您需要更新这里的问题您需要创建错误数组,但结果是数组错误数组。我看了我的新帖子,好的。您是否尝试过此映射([geral,utilsst,utilfac,utilatas]:[any[],any[],any[],any[],any[],any[]])=>{let result=[…geral,…utilsst,…utilfac,…utilatas];console.log('result',result)return result;})是的,我什么都试过了。顺便说一句,我必须使用flatMap,因为ngFor无法读取简单的mapI。我尝试过这个解决方案,但它什么都没做。你升级过代码吗?