gpt4 book ai didi

javascript - 为什么 take 会触发 Observable?

转载 作者:行者123 更新时间:2023-11-30 14:01:47 26 4
gpt4 key购买 nike

我不明白为什么在我的 observable 末尾添加 .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));
}

有人知道为什么吗?愿意分享原因以及这是否是正确的实现方式?请注意,我没有在其他任何地方订阅此功能,但我一直在传递结果。

这里是我调用方法并返回带有授权 header 的响应的地方

  public login(identifier): Observable<any> {
return generateToken(identifier).pipe(
catchError((err: Error) => of(err)),
map(token => {
return {'Authorization': token}
}));
}

最后但并非最不重要的是,此函数在 promise 中转换,响应作为 http 请求返回

function async userLogin(identifier) {
return await login(identifier).toPromise();
}

感谢您的耐心等待

最佳答案

这解释了您的问题:

return await login(identifier).toPromise();

Promise 在 Observable 完成时解析或在出错时拒绝,因此它与 take(1) 一起工作,因为它获取第一个 Observable 值并完成它。

完成后也可以获得输出。而且看起来更合适一点:

} else if (token) {
observer.next(token);
observer.complete(); <---
}

关于javascript - 为什么 take 会触发 Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56202240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com