Javascript 将参数传递到观察值数组中
我正在使用一个Javascript 将参数传递到观察值数组中,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,我正在使用一个forkJoin的可观察对象,但是我在传递可观察对象的参数时遇到了麻烦。千言万语的代码行: for(var key in pdfObjects){ let pdf = {pdfObjects[key]}; observables.push(new Observable(observer => { this.createPDF(pdf).subscribe((pdfFile) => { // Do something
forkJoin
的可观察对象,但是我在传递可观察对象的参数时遇到了麻烦。千言万语的代码行:
for(var key in pdfObjects){
let pdf = {pdfObjects[key]};
observables.push(new Observable(observer => {
this.createPDF(pdf).subscribe((pdfFile) => {
// Do something with my pdfFile
observer.complete();
})
})
}
Observable.forkJoin(observables).subscribe(
(next) => {},
(error) => {},
(completed) => {
console.log('completed');
}
);
(为了更清晰,我简化了代码)
正如您在这里所看到的,问题在于当代码执行可观察对象时,pdf
变量等于最后一个pdfObjects
,而不是每个可观察对象的不同变量
问题是我如何“传递”和“复制”我的
pdf
变量,以便每个可观察变量都是不同的?你应该调用下一个
方法,而不是完成
方法:
observables.push(new Observable(observer => {
this.createPDF(pdf).subscribe((pdfFile) => {
// Do something with my pdfFile
observer.next(pdf); // <-----
});
})
有关更多详细信息,请参见此问题:
请参阅以下命令:。您应该调用
next
方法,而不是complete
方法:
observables.push(new Observable(observer => {
this.createPDF(pdf).subscribe((pdfFile) => {
// Do something with my pdfFile
observer.next(pdf); // <-----
});
})
有关更多详细信息,请参见此问题:
请看这个例子:。@Thierry是对的,这里有一个例子来说明发生了什么() 结果:
createObservable: Object A Object A a
createObservable: Object B Object B b
createObservable: Object C Object C c
createObservable.create: Object A Object C c
createObservable.create: Object B Object C c
createObservable.create: Object C Object C c
调用
createObservable
时,每个值都是您所期望的。但是,当您订阅您的观察对象时,RxJs调用接受observer
的匿名函数,并使用pdf
和key
的当前值,这是上次通过循环时的值。但是因为您正在创建一个函数,所以有一个新的作用域,该作用域中的参数“p”是调用该函数时使用的值 @Thierry是对的,这里有一个例子来说明发生了什么()
结果:
createObservable: Object A Object A a
createObservable: Object B Object B b
createObservable: Object C Object C c
createObservable.create: Object A Object C c
createObservable.create: Object B Object C c
createObservable.create: Object C Object C c
调用
createObservable
时,每个值都是您所期望的。但是,当您订阅您的观察对象时,RxJs调用接受observer
的匿名函数,并使用pdf
和key
的当前值,这是上次通过循环时的值。但是因为您正在创建一个函数,所以有一个新的作用域,该作用域中的参数“p”是调用该函数时使用的值 谢谢,但这并不能解决问题observer.next()
将只返回forkJoin
的subscribe
中的pdf值!我需要的是,每个可观察对象都有自己的pdf
变量作为其参数。我认为您的问题与在循环中使用闭包有关。我相应地更新了我的答案……可观察到的有不同的pdf
参数吗?我看到的问题是,您正在使用pdf
引用推送函数,而当forkJoin
执行该引用时,该引用将发生变化(它将等于最后一个pdfObjects项)。我是否遗漏了什么?事实上,在这种情况下,变量不会绑定到内部函数之外的变量(你的问题)。我在我的答案中加了一个plunkr;-)谢谢,但它不能解决这里的问题observer.next()
将只返回forkJoin
的subscribe
中的pdf值!我需要的是,每个可观察对象都有自己的pdf
变量作为其参数。我认为您的问题与在循环中使用闭包有关。我相应地更新了我的答案……可观察到的有不同的pdf
参数吗?我看到的问题是,您正在使用pdf
引用推送函数,而当forkJoin
执行该引用时,该引用将发生变化(它将等于最后一个pdfObjects项)。我是否遗漏了什么?事实上,在这种情况下,变量不会绑定到内部函数之外的变量(你的问题)。我在回答中添加了一个plunkr;-)你是想在let中用括号括起值,创建一个键为“pdfObjects”的新对象,还是简化时的输入错误?你是想在let中用括号括起值,创建一个键为“pdfObjects”的新对象,还是简化时的输入错误?