Я не могу понять, почему добавление .take (1) в конце моей наблюдаемой приводит к получению результата, а если нет, то продолжает ждать:
function generateToken(identifier){
return new Observable<string>((observer) => {
jwt.sign(identifier, 'devsecret', (err, token) => {
if (err) {
observer.error(err);
} else if (token) {
observer.next(token);
}
});
}).pipe( take(1));
}
Кто-нибудь знает почему? Вы хотите поделиться причиной и правильной ли это реализацией? Имейте в виду, что я не подписываюсь на эту функцию где-либо еще, но я продолжаю обмениваться результатами.
здесь я вызываю метод и возвращаю ответ с заголовком авторизации
public login(identifier): Observable<any> {
return generateToken(identifier).pipe(
catchError((err: Error) => of(err)),
map(token => {
return {'Authorization': token}
}));
}
и последнее, но не менее важное: эта функция преобразуется в обещание, а ответ возвращается в виде http-запроса
function async userLogin(identifier) {
return await login(identifier).toPromise();
}
Спасибо за ваше время и терпение