Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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/TypeScript/RxJS-I';我尝试了所有的map、concat、merge等格式副本,试图在数组中获取嵌套项_Angular_Typescript_Rxjs - Fatal编程技术网

Angular/TypeScript/RxJS-I';我尝试了所有的map、concat、merge等格式副本,试图在数组中获取嵌套项

Angular/TypeScript/RxJS-I';我尝试了所有的map、concat、merge等格式副本,试图在数组中获取嵌套项,angular,typescript,rxjs,Angular,Typescript,Rxjs,当前,以下最后几行(从17个this.http.get请求的Observable.forkJoin检索后): 您看到的上面的console.log以以下格式提供数据: 如您所见,它在数组中包含数组。我只需要一个可观察的数组,对象嵌套在shell数组中的两层。再一次,我尝试了所有的地图,concat,reduce,merge等等。使用RxJS,我觉得我只是插入一些东西,直到它工作为止。当我阅读文档时,我很难理解它与我正在尝试做的事情之间的关系(也欢迎提供培训资源)。特别是对于这个问题,有人知道如

当前,以下最后几行(从17个this.http.get请求的Observable.forkJoin检索后):

您看到的上面的console.log以以下格式提供数据:

如您所见,它在数组中包含数组。我只需要一个可观察的数组,对象嵌套在shell数组中的两层。再一次,我尝试了所有的地图,concat,reduce,merge等等。使用RxJS,我觉得我只是插入一些东西,直到它工作为止。当我阅读文档时,我很难理解它与我正在尝试做的事情之间的关系(也欢迎提供培训资源)。特别是对于这个问题,有人知道如何返回一个包含对象的可观察数组吗

使用来自forkJoin的附加代码进行更新:

return Observable.forkJoin(
            this.http.get(this.baseUrl + webs[0] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[1] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[2] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[3] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[4] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[5] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[6] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[7] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[8] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[9] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[10] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[11] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[12] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[13] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[14] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[15] + this.topicsRest, this.options).map((res: Response) => res.json().d.results),
            this.http.get(this.baseUrl + webs[16] + this.topicsRest, this.options).map((res: Response) => res.json().d.results)
        )
摆脱这一行:

.map(data => Observable.from(data))
这是用另一个可观察的东西来包装可观察的东西,可能不是你想要的

我同意Rxjs文档令人沮丧!您可能会发现rxmarbles.com是一些常用函数的有用参考资料,尽管它不是第一次学习的好资源


希望我回答了你的问题。

我想明白了。以下是服务功能的最终代码:

    return Observable.forkJoin(webs.map(web => 
        this.http.get(this.baseUrl + web + this.topicsRest, this.options).map((res: Response) => res.json().d.results)
    ))
        .flatMap(data => data.map(item => item.map(object =>  object )))
        .do(data => console.log(data))
}

其中,Web是相对站点路径的数组。我在模板的ngFor上做了一个异步管道,它成功了。谢谢大家的参考和帮助,它为我指明了正确的方向。

我尝试了与您不同的方法,基本上我将集合平铺成一个数组。检查:

接口数据{
文本:字符串;
val:数字;
};
//这可能是一种服务方法
方法():可观察{
例如:可观察的;
常数网=[1,2,3];
//使用测试数据创建假观测值
const source=forkJoin(webs.map(val=>of([{text:'1rst',val:val+1},{text:'2nd',val:val+2}]));
示例=source.mergeMap(数据=>data).mergeMap(数据=>data).toArray();
返回示例;
}
有了这个,你会得到一个可观测的,它发射一个阵列,所有元素都在不同的阵列中


希望有帮助

谢谢你的资源!我现在正在看这个。我删除了它,VS给了我一个错误“any[]不可赋值给Observable.\u IsScalar丢失了…”。控制台输出是相同的。你能发布更多的代码吗,包括带有forkJoin的部分,并提到错误发生在哪一行?topicData字段的类型是什么?topicData:可观察;如果topicData是可观察的,那么您根本不应该订阅。类似这样的东西就足够了:
this.topicData=Observable.forkJoin(…)
所以你有一个17个位置的数组,每个位置都包含一个数组本身,最后你想把这17个数组连接/合并成一个?还是我误解了你的问题?这17个数组中还有其他包含对象的数组。17个数组只包含对象数组。我只是在包含数组的第二个下面的一个对象数组。实际上我撒谎了,我今天早上意识到平面图刚刚删除了17个数组中的第一层。当它击中ngFor时,它只是在第一个子数组中循环,所以只有4个项目。然后,我使用.concatMap(data=>data)将所有对象从第二组数组容器中取出,然后使用.toArray()将所有这些对象放入数组中。现在很好用D
    return Observable.forkJoin(webs.map(web => 
        this.http.get(this.baseUrl + web + this.topicsRest, this.options).map((res: Response) => res.json().d.results)
    ))
        .flatMap(data => data.map(item => item.map(object =>  object )))
        .do(data => console.log(data))
}
interface Data {
  text: string;
  val: number;
};

// this could be a service method
method(): Observable<Data[]> {
    let example: Observable<Data[]>;
    const webs = [1, 2, 3];
    //created fake Observables with test data
    const source = forkJoin(webs.map(val => of<Data[]>([{ text: '1rst', val: val + 1 }, { text: '2nd', val: val + 2 }])));
    example = source.mergeMap(data => data).mergeMap(data => data).toArray();
    return example;
  }