Size: a a a

Angular - русскоговорящее сообщество

2020 May 15

AT

Alexander Trunov in Angular - русскоговорящее сообщество
Bogdan Khamitov
Переписал код на более-менее понятный.  Я хочу , чтобы когда все запросы выполнятся в forkJoin , то можно было выполнить другую функцию.Я в курсе , что если будет хоть одна ошибка в observable в forkJoin , то весь запрос идет в ошибку.Но я вроде отлавливаю ошибку и обрабатываю её , но тем не менее весь запрос идет в ошибку.Подскажите , как решить это

                                                 let dbData;
                                                 this.db.getAllDataFromDb()
                                                 .subscribe(value => {
                                                   dbData = value;
                                                   console.log(dbData);
                                                 },
                                                 err => {
                                                   console.error('Oops:', err.message);
                                                 },
                                                 () => {
                                                   forkJoin(Object.keys(dbData)
                                                     .map((key) => {
                                                       this.facebookService.getDataOfAds(dbData[key].token)
                                                       .pipe(catchError(error => of(error)))
                                                       .subscribe(value => {
                                                         this.ls.addItem(value,dbData[key]);
                                                       },
                                                       err => {
                                                         console.error('Oops:', err.message);
                                                       }),
                                                       () => {}
                                                       // this.ls.addItem(dbData,dbData[key]);
                                                     })).subscribe(() =>
                                                   console.log("success")
                                                   );
                                                   });
Код не запускал. Может быть поможет:

let dbData;

const getDataOfAds = (token: string) => this.facebookService
 .getDataOfAds(token)
 .pipe(
   catchError(error => of(new Error(Get data for ${token} failed)))
 );

this.db.getAllDataFromDb()
 .pipe(
   catchError(error => throwError(Oops: ${error.message})),
   tap(response => dbData = response),
   map(response => Object.keys(response).map(key => response[key].token)),
   mergeMap((tokens: string[]) => forkJoin(tokens.map(token => getDataOfAds(token))))
 )
 .subscribe({
   next: (response) => {
     Object.keys(dbData).forEach((key, index) => {
       const value = response[index];
       if (value instanceof Error) {
         console.error(value.message);
       } else {
         this.ls.addItem(value, dbData[key])
       }
     })      
   },
   error: (error) => console.error(error)
 });
источник

VS

Vova Soltys in Angular - русскоговорящее сообщество
@dersizes Когда стоит выбор между более производительным и более понятным для других кодом какой выбирать?
источник

АВ

Александр Вдовенков... in Angular - русскоговорящее сообщество
Тот который тебе больше нравится. )))
источник

VS

Vova Soltys in Angular - русскоговорящее сообщество
Александр Вдовенков
Тот который тебе больше нравится. )))
🤔
источник

MM

Maxim Merkulov in Angular - русскоговорящее сообщество
салют. кто то знает вариант что бы все время в конце текущего пути был / ?
источник

AT

Alexander Trunov in Angular - русскоговорящее сообщество
Здесь запрашиваем данные из Db. В случае ошибки ее отловит первый catchError. В нем можно какую-то специфическую обработку ошибки для Db сделать. В данном случае просто генерируем Error с текстом.

В tap сохраняем полученные из БД данные в переменную dbData.

С помощью следующего map выбираем только токены, которые нужны для запроса к facebook. Полагаю что там тип string, поэтому его указал.

Далее для каждого токена в массиве дергаем функцию getDataOfAds(), которая возвращает Observable. Обрати внимание, на то, что с помощью catchError мы отлавливаем ошибки и преобразуем их к объектам Error. Таким образом у нас поток запроса всегда будет завершаться успешно.

Полученный массив Observables передаем forkJoin, который в свою очередь возвращает новый Observable. Потому "переключаемся" на него с помощью mergeMap.

В основном subsribe() производим разбор полетов. Индексы массива ответов (из response), соответствуют индексам массива ключей из dbData.
источник

VP

Vitaliy Petruk in Angular - русскоговорящее сообщество
Є.євм

 Ґ. Е
источник

b

baranovskyi in Angular - русскоговорящее сообщество
привет
кто-то сталкивался с ошибками типа "unable to get property "property" of undefined or null reference? ошибка в IE11 только в прод режиме?
источник

BK

Bogdan Khamitov in Angular - русскоговорящее сообщество
Alexander Trunov
Здесь запрашиваем данные из Db. В случае ошибки ее отловит первый catchError. В нем можно какую-то специфическую обработку ошибки для Db сделать. В данном случае просто генерируем Error с текстом.

В tap сохраняем полученные из БД данные в переменную dbData.

С помощью следующего map выбираем только токены, которые нужны для запроса к facebook. Полагаю что там тип string, поэтому его указал.

Далее для каждого токена в массиве дергаем функцию getDataOfAds(), которая возвращает Observable. Обрати внимание, на то, что с помощью catchError мы отлавливаем ошибки и преобразуем их к объектам Error. Таким образом у нас поток запроса всегда будет завершаться успешно.

Полученный массив Observables передаем forkJoin, который в свою очередь возвращает новый Observable. Потому "переключаемся" на него с помощью mergeMap.

В основном subsribe() производим разбор полетов. Индексы массива ответов (из response), соответствуют индексам массива ключей из dbData.
Благодарен очень сильно . Добавил еще
complete:() => console.log("все выполнилось")
источник

AT

Alexander Trunov in Angular - русскоговорящее сообщество
baranovskyi
привет
кто-то сталкивался с ошибками типа "unable to get property "property" of undefined or null reference? ошибка в IE11 только в прод режиме?
В тексте ошибки все сказано - попытка чтения свойства объекта. Но вместо объекта у тебя undefined или null. Нужно дебажить.
источник

b

baranovskyi in Angular - русскоговорящее сообщество
это понятно)
просто эта ошибка только в проде
локально нет никаких ошибок
источник

AT

Alexander Trunov in Angular - русскоговорящее сообщество
baranovskyi
это понятно)
просто эта ошибка только в проде
локально нет никаких ошибок
Ну здесь все очень индивидуально. Ошибка может быть в твоем коде. Может быть в коде сторонней библиотеки. В общем нужно с помощью инспектора отлаживаться. Попробуй включить source map'ы для prod режима и дальше в инспекторе смотри, где происходит ошибка. См. https://medium.com/angular-in-depth/debug-angular-apps-in-production-without-revealing-source-maps-ab4a235edd85
источник

b

baranovskyi in Angular - русскоговорящее сообщество
спасибо большое
источник

I

Ilya in Angular - русскоговорящее сообщество
Никто с  firebase не работал? не подскажете, как сделать выборку документов когда поле false или его нет? Не смог найти в доке
источник

sr

sudo root in Angular - русскоговорящее сообщество
Всем привет, кто-то в курсе почему после ng build --prod перестает работать hover прописанный в .scss, на ng serve все работает норм 🤷‍♂
источник

AS

Anton Shvets in Angular - русскоговорящее сообщество
sudo root
Всем привет, кто-то в курсе почему после ng build --prod перестает работать hover прописанный в .scss, на ng serve все работает норм 🤷‍♂
а в сбилженых стилях смотрел что там?
источник

AS

Anton Shvets in Angular - русскоговорящее сообщество
как получить полный url по которому пойдет http.get не делая запроса?
источник

sr

sudo root in Angular - русскоговорящее сообщество
Anton Shvets
а в сбилженых стилях смотрел что там?
там исчезает блок с hover
источник

ss

san shan in Angular - русскоговорящее сообщество
Alexander Trunov
Здесь запрашиваем данные из Db. В случае ошибки ее отловит первый catchError. В нем можно какую-то специфическую обработку ошибки для Db сделать. В данном случае просто генерируем Error с текстом.

В tap сохраняем полученные из БД данные в переменную dbData.

С помощью следующего map выбираем только токены, которые нужны для запроса к facebook. Полагаю что там тип string, поэтому его указал.

Далее для каждого токена в массиве дергаем функцию getDataOfAds(), которая возвращает Observable. Обрати внимание, на то, что с помощью catchError мы отлавливаем ошибки и преобразуем их к объектам Error. Таким образом у нас поток запроса всегда будет завершаться успешно.

Полученный массив Observables передаем forkJoin, который в свою очередь возвращает новый Observable. Потому "переключаемся" на него с помощью mergeMap.

В основном subsribe() производим разбор полетов. Индексы массива ответов (из response), соответствуют индексам массива ключей из dbData.
Очень красиво
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
робяты, а вот скажите, когда вы пишете свои rxjs операторы?
источник