Передача данных в компонент с помощью GET-запроса

Как я могу передавать данные, полученные в моей службе, обратно в компонент каждый раз, когда ему передаются новые данные/URL-адрес, и перебирать их с помощью NgFor? Я хотел бы использовать обещания, а не наблюдаемые.

Для пояснения: служба (A) должна передавать свой объект компоненту (B) каждый раз, когда данные изменяются, а затем перебирать его с помощью NgFor. заранее спасибо

вот мой код:

СЕРВИС(А)

 receiveEvent(eventId){
   return fetch(eventId).then(res => res.json())
   .then((data:any) => {
     console.log(data);
 });

ПРИЕМНЫЙ КОМПОНЕНТ(B)

 requestEvent(requestUrl){
  this._clientService.receiveEvent(requestUrl)
  }

person Jamal    schedule 09.02.2020    source источник
comment
Я предполагаю, что вы не были довольны моим ответом с использованием наблюдаемых в последний раз, когда вы задавали этот вопрос: . Могу я спросить, почему вы не хотите использовать наблюдаемые? Они действительно очень хорошо подходят для вашего варианта использования.   -  person Kurt Hamilton    schedule 09.02.2020
comment
Если вы настаиваете на обещаниях, то воспользуйтесь советом из моего ответа на ваш предыдущий вопрос и найдите pub/sub, используя обещания. Шаблон, вероятно, более важен для вас, чтобы найти решение здесь, чем технология.   -  person Kurt Hamilton    schedule 09.02.2020
comment
Я изо всех сил пытался заставить его работать, я хотел попробовать другой подход с обещаниями. Наблюдаемые — это большая кривая обучения для меня.   -  person Jamal    schedule 09.02.2020
comment
Я понимаю, что наблюдаемые трудно изучить. Это довольно сложное их использование. Тем не менее, я бы порекомендовал узнать о них, так как они появляются все время, когда вы больше используете Angular. Начните с малого, просто создав свой собственный предмет и поэкспериментировав с ним.   -  person Kurt Hamilton    schedule 09.02.2020


Ответы (1)


Вы можете вернуть обещание и решить в обратном вызове finally:

сервис

fetch(URL: string): Promise < any > {
    return new Promise(resolve => {
        this.http.get(URL)
            .subscribe(response => {
                console.debug("response = %O", response);
                // set data locally
                this.myVariable = data[0]["myVarible"];
            }, error => {
                console.error(error);
            }, () => {  // finally
                resolve();
            })
    });
}

вызов конструктора компонента

this.myService.fetch(URL).then(() => {
    console.log(this.myService.myVariable);
});

Если вы не используете веб-сокеты, вам придется часто опрашивать базу данных для получения новых данных; оберните выборку конструктора вызывающего компонента в setInterval

person xinthose    schedule 09.02.2020