#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)
}))