Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递到观察值数组中_Javascript_Angular_Rxjs_Observable - Fatal编程技术网

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”的新对象,还是简化时的输入错误?