Я запускаю приложениеnesjs и имею кусок кода, который использует forkJoin
const results: string[] = [];
const args = ['arg1', 'arg2', 'arg3', 'arg4', 'arg5', 'arg6'];
....
switchMap(() => {
const setToHandle = [];
args.forEach(arg => setToHandle.push(this.doWorksAndGetResult(arg)));
return forkJoin(setToHandle);
}),
tap(() => {
this.logService.debug(...results);
})
Так что это работает нормально, и я распечатал результаты в журнале. Но этот forkJoin(setToHandle) сейчас устарел и должен использоваться так forkJoin([setToHandle]) в соответствии с документацией. Но это не работает, результаты не печатаются в журнале, нет наблюдаемых, вызываемых внутри функции doWorksAndGetResult. Может ли кто-нибудь помочь мне с этим?
После добавления достаточного количества кода, чтобы заставить ваш пример работать, я обнаружил, что строгий ввод setToHandle устранил проблему. (По крайней мере, в моей версии вашего кода.)
const setToHandle: string[] = [];
В противном случае я думаю, что языковая служба запуталась.
ОБНОВЛЕНИЕ на основе ваших комментариев:
Эта инициализация недействительна:
const setToHandle: Observable<void> = [];
Вы не можете инициализировать Observable<void> пустым массивом []. И вы не можете позже в своем коде push на Observable<void>
Не могли бы вы предоставить нам достаточно рабочего кода, чтобы мы лучше поняли, что вы пытаетесь сделать. См. этот Stackblitz для начала: https://stackblitz.com/edit/angular-ivy-yp3ocd
ОБНОВЛЕНИЕ 2 на основе ваших более поздних комментариев:
ForkJoin() takes in an array.
const setToHandle: Observable<boolean>[] = [];
SetToHandle уже определен как массив.
Передача [setToHandle] помещает массив в другой массив.
Если вам действительно нужно использовать квадратные скобки, то это работает:
return forkJoin([...setToHandle]);
Оператор распространения (...) расширяет массив.
Привет, Дебора. Спасибо за ваше время и усилия, чтобы помочь мне с этой проблемой, я очень ценю это. К сожалению, это тоже не помогло. ` const setToHandle: Observable<void> = []; ` Внутри кода функции doWorksAndGetResult, который достигает базы данных ` return from(this.typeORM.query('SELECT ....')) .pipe( switchMap((res) => { console.info("Я здесь !!!"); // делаем что-то this.results.push(some_variable); return of(); })); `
Не попадает в console.info("Я здесь!!!")
Смотрите мое обновление выше.
Привет, Дебора. Пожалуйста, посмотрите здесь
Я использую приведенную выше ссылку и не вижу проблемы?
Привет @Дебора. здесь Я изменил код, чтобы показать проблему. В консоли должен быть вывод (строка 24), но это не так. Если вы измените return forkJoin([setToHandle]); вернуть forkJoin(setToHandle); вы увидите вывод (строка 21). Но это должно работать и в этом случае return forkJoin([setToHandle]);
См. обновление 2 выше.
Большое спасибо, Дебора!!! Это действительно работает!
@churill код, который я привел выше, является копией рабочего кода. Он все еще работает, но с предупреждением об устаревании. Данная документация к нему, поэтому делаю как там описано. Даже когда я подписываюсь, это не работает.