Как правильно вставить массив в тему rxjs - PullRequest
0 голосов
/ 23 октября 2019

Я получаю 3 раза один и тот же массив, когда вставляю свой массив в тему rxjs.

Родительский компонент:

    const geoExistsArr: { lat: number, lng: number }[] = [];
    for (let i = 0; i < x.length; i++) {
        for (let j = 0; j < requiredKeys.length; j++) {
            // Some logic
        }
        if (has(x[i].data, 'lat') && has(x[i].data, 'lng')) {
            // Pushing to array
            const { lat, lng } = x[i].data;
            geoExistsArr.push({ lat, lng })
        }
    }
    console.log(geoExistsArr)
    // Adding the array to subj.
    this.locationSrv.setLocations(geoExistsArr)

Служба:

setLocations(loc: ILocation) {
    this.geoArray = [...this.geoArray, loc]
    this.geoSubj$.next(this.geoArray)
}

Дочерний компонент (отображение значений от субъекта):

    this.geoLocation$ = this.locationSrv.geoCoordinates$.pipe(
        switchMap((geo, idx) => {
            console.log(geo, idx) // <- problem here. this guy prints 3 times.
            geo.forEach(g => {
                console.log(g)
                requests.push(this.locationSrv.getAddressByLatLng$(g))
            });
            return concat(...requests).pipe(
                toArray()
            )
        }),

Что должно произойти: я сохраняю отдельный массив для субъекта.

Я ослеп на эту ошибку, поэтому любая помощьбыл бы оценен!

1 Ответ

0 голосов
/ 23 октября 2019

Хорошо, я признаю имму осла. Внутри моего дочернего компонента у меня был запущен цикл *ngFor, а шаблон, где я разворачиваю geolocations$ | async, был как раз внутри этого цикла. @Andrew Allen предложил посмотреть, сколько раз вызывался func объекта subject (), но для любого, кто читает это, проверьте, не развертываются ли ваши наблюдаемые шаблоны несколько раз в html-файле. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...