Форум программистов, компьютерный форум, киберфорум
Angular/AngularJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 39

Объект до запроса не пустой, после запроса становиться пустым

24.05.2018, 11:02. Показов 1411. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане) Возникла следующая проблема при отправке запросов на сервер.
Есть функция, которая для каждого материала получает список похожих материалов:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
similarMaterials() {
       let self = this;
        for (var i = 0; i < self.materials.length; i++) {
            //alert(this.materials[i].id);
            self.filter = {
                SelectionCriteria: {
                    Text: self.materials[i].id
                }
            };
            
            self.http.post(self.baseUrl + 'api/materials/', {
                Method: "similar",
                Params: self.filter
            }).subscribe(result => {
                
                if (result != null) {
                    
                    self.materials[i].similarmaterials = result.json() as Materials1[];
                   
                }
                 
            }, error => console.error(error));
 
        }
    }
Дело в том, что до запроса объект materials[i] не пустой, а как запрос обрабатывается становиться пустым. В чем может быть проблема?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2018, 11:02
Ответы с готовыми решениями:

Пустой recordset после запроса
Есть код Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset cn = New ADODB.Connection Try ...

Пустой результат запроса
Как в ПШП узнать, что запрос из базы вернулся пустой?

Вызов ajax запроса после обработки другого ajax запроса
Добрый день. По нажатию на кнопку происходит ajax запрос. Сервер возвращает true или false. Если результат true, то должен выполняться еще...

4
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
24.05.2018, 11:57
Лучший ответ Сообщение было отмечено rad1996 как решение

Решение

JavaScript
1
self.materials[i]
попробуй эту i сбросить в новую переменную внутри цикла.

Вероятно

JavaScript
1
.subscribe(result => {
срабатыкает когда
JavaScript
1
for (var i = 0; i < self.materials.length; i++) {
i уже имеет совсем другое значение.
1
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 39
24.05.2018, 14:41  [ТС]
хорошо) спасибо за ответ) сейчас попробую)

Добавлено через 4 минуты
получилось) а почему так происходит?

Добавлено через 5 минут
LeniumSoft, получилось) Только вот мне не понятно, почему так происходит? Как правильно делать запросы в цикле?)
0
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
24.05.2018, 15:45
Цитата Сообщение от rad1996 Посмотреть сообщение
Как правильно делать запросы в цикле?)
Да ничего криминального тут нет. Просто нужно следить за используемыми переменными.

Цитата Сообщение от rad1996 Посмотреть сообщение
Только вот мне не понятно, почему так происходит?
Запрос асинхронный! Т.е. между запросом и его ответом может выполняться другой код.
У тебя это:
JavaScript
1
for (var i = 0; i < self.materials.length; i++) {
Запросы уходят в цикле!
А вот приходят они уже после всего этого цикла.

Тут:
JavaScript
1
.subscribe(result => {
переменная i уже давно равна self.materials.length
для всех ответов.

Ещё раз!!! Переменная i едина для цикла и всего что в нём. Она не уникальная для запроса и ответа.
Javascript успевает её промотать до self.materials.length.

Сбрасывание значения в отдельную переменную решает эту проблему!
Новая переменная становится уникальной для запроса/ответа.

Короче это всё причуды асинхронного кода.
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 39
24.05.2018, 15:56  [ТС]
Понятно, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2018, 15:56
Помогаю со студенческими работами здесь

Возвращает пустой результат запроса
создаю и заполняю таблицы: create table customers ( id_customer int NOT NULL AUTO_INCREMENT, name char(50) NOT NULL, email...

Почему Пустой Результат Запроса?
Запрос = Новый Запрос; Запрос.Текст = &quot;ВЫБРАТЬ | КонтактнаяИнформация.Вид, | КонтактнаяИнформация.Поле3 как Телефон, ...

Пустой результат запроса(почему)
Если я напишу простой запрос: $que = &quot;Select id_persum From `persum_general` Where category = '$cat' &quot;; ...

Почему пустой результат запроса?
Приветствую, коллеги. бьюсь уже целый день, не могу понять почему запрос не возвращает рез-т $conn = db_connect(); if($conn){ ...

При ошибки POST запроса ответ пустой
Всем привет! Ребят делаю POST запрос если все правильно получаю в Memo1 JSON ответ, но если я делаю ошибку в POST запросе то получаю пустую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru