последнее итерированное значение приходит во всех объектах - PullRequest
0 голосов
/ 05 мая 2018

Я выполняю итерацию коллекции документов и подтерации для каждого родительского элемента итерации.

public getxxxxxTimings(key : string) : any {

    console.log('key '+key);
    return this.afs.collection('/xxxxx/'+key+'/slots').doc('1').ref.get().then((doc)=>{

        let json = doc.data();
        console.log('json data '+json);
        console.log("Document keys:", Object.keys(json));
        Object.keys(json).forEach((name) => {
            this.timingRef = new Timing();
            console.log('name '+name);
            this.timingRef.slot = name;
            this.timingRef.available = json[name];
            this.afs.collection('/slots/').doc(name).ref.get().then((doc)=>{
                let json2 = doc.data();
                console.log('json data '+json2);
                console.log("Document keys:", Object.keys(json2));
                Object.keys(json2).forEach((name2) => {

                    if(name2 == 'from'){
                        this.timingRef.from = json2[name2];
                    }
                    else{
                        this.timingRef.to = json2[name2];
                    }

                })

                console.log('Timings count '+this.Timings.push(this.timingRef));

            })

        })

        return this.Timings;


    });



  }

В приведенном выше коде родительский цикл подготавливает объект в каждой итерации и передает его в коллекцию. Проблема заключается в том, что все объекты заполняются последними итеративными значениями, когда журналы отображаются, как и ожидалось.

key -KiDPBvL9xG7_hAQ0kpv
timingmodal.ts:29 key -KiDPBvL9xG7_hAQ0kpv
user-service.ts:119 key -KiDPBvL9xG7_hAQ0kpv
timingmodal.ts:38 ionViewDidLoad TimingmodalPage
user-service.ts:123 json data [object Object]
user-service.ts:124 Document keys: (4) ["1", "2", "3", "5"]
user-service.ts:127 name 1
user-service.ts:127 name 2
user-service.ts:127 name 3
user-service.ts:127 name 5
user-service.ts:132 json data [object Object]
user-service.ts:133 Document keys: (2) ["from", "to"]
user-service.ts:145 Timings count 1
user-service.ts:132 json data [object Object]
user-service.ts:133 Document keys: (2) ["from", "to"]
user-service.ts:145 Timings count 2
user-service.ts:132 json data [object Object]
user-service.ts:133 Document keys: (2) ["from", "to"]
user-service.ts:145 Timings count 3
user-service.ts:132 json data [object Object]
user-service.ts:133 Document keys: (2) ["from", "to"]
user-service.ts:145 Timings count 4

Пользовательский интерфейс записан как

<ul>
  <li *ngFor="let timing of Timings | async">
    {{ timing.slot }} -{{ timing.from }} -- {{ timing.to }}-- {{ timing.available }} 
  </li>
</ul>

Значения отображаются, как показано ниже.

enter image description here

В идеале это должно быть как ..

1-9-10 - правда

2-10-11 - правда

3-11-12 - ложь

5-13-14 - правда

Что мне здесь не хватает, пожалуйста, сообщите.

1 Ответ

0 голосов
/ 06 мая 2018

Работает и корректно отображается после замены глобального объекта timingRef локальной ссылкой.

this.timingRef = new Timing(); => let timingRef = new Timing(); 

Спасибо за user184994, поскольку его / ее комментарий дал мне подсказку подумать об этом.

...