Я хочу получить список строк, используя localStorage, представленный:
this.userService.getExpertisesListByIdUser(2).map((listExpertises: Array<any>) =>
{
let result:Array<Expertise> = [];
let libs:Array<String> = [];
if (listExpertises)
{
listExpertises.forEach((expert) =>
{
libs.push(expert.name);
result.push(new Expertise(expert.id, expert.name, expert.username));
});
}
localStorage.removeItem("libs");
localStorage.setItem("libs", JSON.stringify(libs));
})
var storedNames = JSON.parse(localStorage.getItem("libs"));
console.info(storedNames.length); // That gives 0 as length : WRONG
метод getExpertisesListByIdUser:
getExpertisesListByIdUser(id: number): Observable<any>
{
return this.http.get(`${this.baseUrl}/users/expertises/${id}`);
}
Как прокомментировано, я получил длину как 0.
Я получил правильный результат, если поставил localStorage снаружи map.
Но он мне нужен внутри map, чтобы получить синхронизация.
Теперь размер правильный с этим кодом.
this.userService.getExpertisesListByIdUser(2).subscribe(listExpertises => {
let libs:Array<String> = [];
let exps:Array<Expertise> = [];
if (listExpertises)
{
listExpertises.forEach((expert) =>
{
libs.push(expert.name);
exps.push(new Expertise(expert.id, expert.name, expert.selected));
});
}
localStorage.removeItem("libs");
localStorage.setItem("libs", JSON.stringify(libs));
localStorage.removeItem("exps");
localStorage.setItem("exps", JSON.stringify(exps));
});
var storedNames = JSON.parse(localStorage.getItem("libs"));
var storedExperties = JSON.parse(localStorage.getItem("exps"));
console.info("----------------- Size: " + storedNames.length);
console.info(storedNames);
storedNames.forEach((name: string) =>
{
console.info("--------------Name from list of strings: " + name);
});
storedExperties.forEach((exp: Expertise) =>
{
console.info("--------------Name from list of objects: " + exp.name);
});
но на консоли я получил:
Не могли бы вы сказать мне, что я пропустил?.
Заранее спасибо.
Здравствуйте, сэр @splash, это работает.
Вы также можете сделать то же самое, используя карту, но тогда вам также придется использовать var StoredNames = JSON.parse(localStorage.getItem("libs")); console.info(хранимыеИмена.длина); внутренняя карта





Вы пробовали использовать .subscribe()?
this.userService.getExpertisesListByIdUser(2).subscribe(listExpertises => {
let result:Array<Expertise> = [];
let libs:Array<String> = [];
if (listExpertises)
{
listExpertises.forEach((expert) =>
{
libs.push(expert.name);
result.push(new Expertise(expert.id, expert.name, expert.username));
});
}
localStorage.removeItem("libs");
localStorage.setItem("libs", JSON.stringify(libs));
var storedNames = JSON.parse(localStorage.getItem("libs"));
console.info(storedNames.length);
});
.map() следует использовать только в том случае, если вы хотите добавить функции канала к наблюдаемому объекту. Также вам не нужно определять тип ответа внутри функции подписки. Если вы хотите определить свой тип ответа, вы делаете это при использовании http-клиента.
getExpertisesListByIdUser(id: number): Observable<yourTypeHere>
{
return this.http.get<yourTypeHere>(`${this.baseUrl}/users/expertises/${id}`);
}
@Missar Конечно, вы должны быть уверены, что то, что вы получаете из ответа, не является пустым массивом/списком.
@Missar Вы не должны редактировать ответ, чтобы задать вопрос, связанный с ответом. Вы должны спросить в его комментариях. Вы говорите, что длина списка из ответа равна 1, но вы не получаете от него никаких желаемых значений. В этом случае вы должны console.info() просмотреть список в первую очередь.
@Миссар, я имел в виду, что вы должны регистрировать весь объект, а не его длину. Вот так: console.info(listExpertises) в верхней части функции подписки.
Извините, сэр @kebbaben, за это. Возвращаю ответ. console.info(listExpertises) создает пустой список. Я прикрепил к своему вопросу скриншот. Не могли бы вы взглянуть. Большое спасибо, сэр.
@Миссар, и вы записываете это первым, что вы делаете в функции подписки? Если это так, то проблема заключается в ответе http. Сам массив не нулевой, но один элемент в нем есть. Вероятно, это означает, что здесь виновата функция, связанная с ${this.baseUrl}/users/expertises/${id}. Проверьте эту функцию и убедитесь, что URL-адрес правильный с обеих сторон.
URL http://localhost:6227/api/auth/users/expertises/2 выдает на почтальоне [ "Angular" ]
@Missar Тогда вы уверены, что URL-адрес в вашем коде правильный? Вы на 100% уверены, что ${id} на самом деле равен 2, когда вы вызываете функцию?
Хорошо, сэр, я нашел это. Мне нужно добавить конструктор с полями в сущности (Spring Boot). Большое спасибо, сэр.
Кстати, сэр, у вас есть другой способ поддерживать синхронизацию между inside subscribe и outside subscribe, кроме localStorage.
@Missar просто сохраните libs в локальной переменной вместо того, чтобы устанавливать ее в localStorage, если вы просто хотите сохранить ее в том же файле.
Но это не может поддерживать синхронизацию от inside subscribe до outside subscribe. this.userService.getExpertisesListByIdUser(+userId).subscribe(listExpertises => { if (listExpertises) { listExpertises.forEach((expert) => { this.libs.push(expert); }); } }); this.libs.forEach((name: string) => { console.info("--------------Name: " + name); }); Я получил нулевое значение, поэтому
Синхронизация @Missar с наблюдаемыми сложна и, как правило, неправильный путь. Обычно вы делаете все, что связано с данными из наблюдаемого внутри, с помощью функции подписки. Узнайте больше о Наблюдаемые и Наблюдаемые в Angular
@Миссар, если это помогло вам, не могли бы вы отметить как ответ?
Используйте .subscribe
так:
this.userService.getExpertisesListByIdUser(2).subscribe((listExpertises: Array<any>) => {
console.info(listExpertises)
... // rest of your code
})
@Missar Вы не должны редактировать ответ, чтобы задать вопрос, связанный с ответом. Покажите console.info(listExpertises)
Извините, миссис @AdritaSharma, за это. Возвращаю ответ. console.info(listExpertises) создает пустой список. Я прикрепил к своему вопросу скриншот. Не могли бы вы взглянуть. Большое спасибо миссис
Похоже, у вас проблемы с бэкендом. Попробуйте с почтальоном и проверьте
Привет, миссис @ Адрита Шарма, в почтальоне все было в порядке. Я получил [ "Angular" ]
Хорошо, мисс, я нашел это. Мне нужно добавить конструктор с полями в сущности (Spring Boot). Большое спасибо, мисс. Кстати, мисс, у вас есть другой способ поддерживать синхронизацию с inside subscribe на outside subscribe, кроме localStorage.
Я думаю, вы пропустили
subscribe