В rxjs я сначала пытаюсь получить все данные, затем мне нужно перейти к следующей строке

В Angular 5 у меня есть наблюдаемый массив, и я подписываюсь на него в компоненте. И в следующей строке инструкции я проверяю, были ли данные заполнены или нет. Но я обнаружил, что переменная еще не заполнена.

https://github.com/vsaravanan/ngx-mat-select-search.git

ОШИБКА TypeError: невозможно прочитать свойство "часть" неопределенного значения. Ошибка @ this.filteredBanksMulti.next (this.banks.slice ());

У меня есть образцы данных, запущенные с jsonserver @ port 3000

        "banks"  :
        [
            { "name" : "apphugIndia", "id": "A"},
            { "name" : "batHugFr", "id": "B"},
            { "name" : "Bank C (France)", "id": "C"},
            { "name" : "hungary", "id": "D"},
            { "name" : "Hungary", "id": "E"},
            { "name" : "Bank F (Italy)", "id": "F"}
        ]

Как решить эту проблему?

Вы можете показать нам пример своего кода? Кроме того, не забудьте проверить метод подписки. Данные больше не существуют вне метода подписки

BrianM 11.05.2018 09:08

это сработало для вас ??

Pranay Rana 11.05.2018 10:14

да. решено. однажды перешел в режим подписки (...)

singapore saravanan 12.05.2018 14:29
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
3
202
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

если ты делаешь это

this.httpCall.getData().subscribe(data=>this.recoreds = data);
this.records 

тогда он не будет работать, поскольку вы вызываете сервер еще не завершено, вам нужно дождаться заполнения данных, это означает, что вы можете выполнять операции только в методе subscribe.

чтобы избежать проблем, вам нужно ввести код в подписку

this.httpCall.getData().subscribe(data=> {
      this.records = data;
      //do code here which uses  this.records
 });

ОК. Я могу дождаться завершения выборки данных до строки «this.records». Могу я узнать, как это решить?

singapore saravanan 11.05.2018 09:31

вы можете внутри функции "подписаться" использовать логическую переменную "покаLoaded = true". (используйте эту переменную и * ngIf, чтобы показать / скрыть сообщение «загрузка»). ПРИМЕЧАНИЕ: в вашем коде я вижу, что вы присоединяетесь к сервису и компоненту в одном файле file.ts - разделите их и создайте два файла .ts-, и я также вижу, что вы используете «старый» и «устаревший» http используйте httpClient вместо http

Eliseo 11.05.2018 09:41

@singaporesaravanan - обновил мой ответ, пожалуйста, посмотрите

Pranay Rana 11.05.2018 10:05

Я согласен на ответы. Но не уверен, насколько эффективно я могу поместить все следующие утверждения в эту функцию подписки. Дай мне попробовать. Спасибо.

singapore saravanan 11.05.2018 10:24

Другие вопросы по теме