Java 完成承诺后可观察到
我必须同时使用承诺和观察 我的前端使用Angular,在我的代码中,我必须使用另一个JavaScript库 我必须使用这个JavaScript库创建许多请求,它返回一个承诺Java 完成承诺后可观察到,java,promise,rxjs,observable,Java,Promise,Rxjs,Observable,我必须同时使用承诺和观察 我的前端使用Angular,在我的代码中,我必须使用另一个JavaScript库 我必须使用这个JavaScript库创建许多请求,它返回一个承诺 let pki = new Library(); let signed: Array<string> = [] const AssinaObservable = new Observable((observers) => { observers.next( tokens.forEach( (v
let pki = new Library();
let signed: Array<string> = []
const AssinaObservable = new Observable((observers) => {
observers.next(
tokens.forEach( (value,index) => {
pki.sign({thumbprint:thumbprint, token: value})
.success(result => {
signed.push(result);
})
})
)
});
observers.complete()
return MyObservable;
让pki=newlibrary();
让签名:数组=[]
常数AssinaObservable=新的可观测值((观察者)=>{
观察员,下一个(
tokens.forEach((值,索引)=>{
pki.sign({指纹:指纹,令牌:值})
.成功(结果=>{
签名推送(结果);
})
})
)
});
观察员:完成()
返回可观察;
我只想在foreach内部执行所有请求之后才能完成我的observative
我已经尝试了很多事情,但在执行所有请求之前,我不知道为什么它会完成
pki.sign返回一个承诺。wait不可用于此函数。您可以使用rxJs操作符
forkJoin
在执行多个承诺后完成一个可观察操作。只需将一系列承诺传递给它,它就会调用next并在所有承诺完成后完成。您应该在observable的subscribe中处理promise数据
let pki = new Library();
let signed: Array<string> = []
const promises = tokens.map( (value, index) => {
return pki.sign({thumbprint:thumbprint, token: value});
});
forkJoin(promises)
.subscribe({
next: (data) => signed.push(result) // handle next ,
complete: () => // complete called,
});
让pki=newlibrary();
让签名:数组=[]
const promises=tokens.map((值、索引)=>{
返回pki.sign({thumbprint:thumbprint,token:value});
});
forkJoin(承诺)
.订阅({
next:(data)=>signed.push(result)//句柄next,
complete:()=>//调用complete,
});
您可以使用RxJSfrom
函数将承诺转换为可观察的承诺。相应地,也使用RxJSforkJoin
的Array#map
来并行触发多个观测值。它将返回一系列响应
试试下面的方法
import{Observable,from}from'rxjs';
从“rxjs/operators”导入{forkJoin};
公共函数():可观察{
返回叉连接(
tokens.map(值=>
from(pki.sign({thumbprint:thumbprint,token:value}).success())
)
);
}
根本不清楚你在这里干什么。什么是tokens
和MyObservable
?另外:tokens.forEach
不返回任何内容,因此您不向观察者发送任何内容。下一步
。如果您使用forkJoin
,则无需将承诺转换为可观察内容。看forkJoin
接受一个ObservableInput
类型参数,该参数“扩展”了一个PromiseLike
类型。@garbear:很高兴知道,谢谢。