两次调用foo
会创建两个订阅者,这是不好的,但即使如此,foo
的第二次调用似乎也被卡住了,因为console.log
只被调用了一次。我知道我不应该以这种方式订阅,但我真的看不到让myFunc
输出第二个结果的解决方案
const myFunc = functions.httpsCallable('myFunc')
function foo(inData){
myFunc({data:inData}).subscribe((res)=>{
console.log(res)
})
}
foo('aaaaa')
foo('bbbbb')
第二次尝试仍然没有运气
myFunc(data){
return functions.httpsCallable('myFunc')(data)
}
async function foo(inData){
let res = await lastValueFrom(myFunc({data:inData}))
console.log(res)
}
foo('aaaaa')
foo('bbbbb')
HttpsCallable函数默认返回一个promise。正如你在这个相关的问题中所看到的,promise和observable之间有一些区别,因为你似乎已经在处理observable了,我会尝试使用这个方法将从函数接收到的promise转换为observable,就像在另一个问题中所建议的那样:
import { from } from 'rxjs';
const observable = from(promise);
尽管如此,在同一个问题中也提出了其他方法。
我还想向您介绍一下Using observables to pass values,我认为您可能没有分享如何创建观察者。我只是猜测,但你也应该取消订阅,为下一次订阅清理数据。此外,缺少所需的next
通知。另外,我想说,如果你没有义务使用可观察性,那么就把它当作一个承诺来处理。