【问题标题】:Observable value inside subscribe is undefined when chaning observables更改可观察对象时未定义订阅中的可观察值
【发布时间】:2020-07-10 22:12:55
【问题描述】:

我有一个来自某个库的函数,它返回一个我想从另一个函数调用的 Observable。我需要将该 Observable 传播到多个函数调用中。以下是我的代码的结构:

extractSignature = (xml, signatureCount = 1) => {
    const observ = this.generateDigest(signedContent, alg).pipe(map(digest => {
            const sigContainer = {
                alg: alg,
                signature: signatureValue,
                signedContent: signedContent,
                digest: digest
            };
            console.log('sigContainer inside pipe: ');
            console.log(sigContainer);
            return sigContainer;
        }));

        return observ;
}

dissasemble(xml): Observable<SignatureContainerModel[]> {
    const observables: Observable<any>[] = [];
        for (let i = 1; i <= count; i++) {
            const extractSigObservable = this.extractSignature(xml, i);

            console.log('extractSigObs inside pipe: ');
            console.log(extractSigObservable);

            const observ = extractSigObservable.pipe(map(sigContainer => {
                console.log('sigContainer inside pipe: ');
                console.log(sigContainer);

                const hashContainers: HashContainerModel[] = [];
                const hashContainer: HashContainerModel = new HashContainerModel();
                hashContainer.digestAlgorithm = sigContainer.alg;
                hashContainer.bytes = sigContainer.digest;
                hashContainers.push(hashContainer);
                const signatureContainer: SignatureContainerModel = {
                    hashContainers: hashContainers,
                    signature: sigContainer.signature
                };

                console.log('observable inside pipe: ');
                console.log(observ);
            }));


            observables.push(observ);
        }

        return forkJoin(observables);
}

verify() {
    this.sigExec.dissasemble(this.fileContent).subscribe((signatureContainers: SignatureContainerModel[]) => {
                // signatureContainers is [undefined] here
                console.log('Sig Containers: ');
                console.log(signatureContainers);
                this.verifyHash(signatureContainers);
            });
}

signatureContainers 变量在订阅中是 [未定义]。我不确定问题出在哪里,因为当我检查我在地图函数中编写的所有日志时,它们看起来都很好

【问题讨论】:

    标签: javascript angular typescript reactivex


    【解决方案1】:

    forkJoin 上的 RXJS 文档:

    请注意,如果提供给 forkJoin 的任何内部 observables 错误,如果您没有在内部 observable 上正确捕获错误,您将丢失任何将或已经完成的其他 observables 的值。如果您只关心所有内部 observables 是否成功完成,您可以在外部捕获错误。 https://www.learnrxjs.io/learn-rxjs/operators/combination/forkjoin

    您有可能在管道内出错并且这些值正在丢失。

    另外,我注意到您没有从管道中返回任何内容。这也可能是个问题。

    【讨论】:

    • 天哪,谢谢。就是这样,我忘了在我的一个管道内添加返回
    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多