Тип ‘Наблюдаемый<Наблюдаемый>’ не может быть присвоен типу ‘Наблюдаемый ‘

#angular #typescript #ngrx #effects

#угловой #машинопись #ngrx #эффекты

Вопрос:

введите описание изображения здесь

попытка решить эту ошибку какой-либо подсказкой? это код, пытающийся выполнить post-запрос, а затем вызвать действия с разрешенными данными

 export class AuthEffects {
authLoging= createEffect(
    ()=> this.actions$.pipe(
        ofType(authActions.LOGIN_START),
        switchMap((authData:authActions.LoginStart)=>
               this.http.post<authResponse>('https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key='   environment.FireBasekey,
                {
                    email: authData.payload?.email,
                    password: authData.payload?.password,
                    returnSecureToken: true
                }).pipe(map(resData => {
                    return of(new authActions.Login({
                        email: resData.email,
                        userId: resData.localId,
                        token: resData.idToken,
                        expirationDate: new Date(new Date().getTime()    resData.expiresIn * 1000)
                    }))
                })
                )
        )
                
    )
);

constructor(private actions$: Actions , private http:HttpClient){}
 

}

Тип ‘Observable<Observable>’ не может быть присвоен типу ‘EffectResult’. Тип ‘Наблюдаемый<Наблюдаемый>’ не может быть присвоен типу ‘Наблюдаемый’. Свойство ‘тип’ отсутствует в типе ‘Наблюдаемый’, но требуется в типе ‘Действие’.

Ответ №1:

Удалите of() в вашей map():

 }).pipe(map(resData => {
                    return new authActions.Login({
 

Оператор отображения уже оборачивает его в observable .

Вы также должны вернуть действие в своем эффекте.

Еще один совет: добавьте a catchError в тот же канал, иначе ваш эффект прекратится, если HttpCall завершится неудачно один раз.

Ответ №2:

это работает, когда я удаляю оператор отсюда и немедленно возвращаю новый экземпляр

  return of(new authActions.Login({
                    email: resData.email,
                    userId: resData.localId,
                    token: resData.idToken,
                    expirationDate: new Date(new Date().getTime()    resData.expiresIn * 1000)
                }))