Наблюдаемое значение внутри подписки не определено при изменении наблюдаемых - PullRequest
0 голосов
/ 11 июля 2020

У меня есть функция из определенной библиотеки, которая возвращает 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 переменная [undefined] внутри подписки. Я не уверен, в чем проблема, поскольку, когда я проверяю все журналы, которые я написал внутри функций карты, они кажутся прекрасными

1 Ответ

2 голосов
/ 11 июля 2020

RX JS Документация по forkJoin:

Имейте в виду, что если какой-либо из внутренних наблюдаемых, предоставленных для ошибки forkJoin, вы потеряете значение любых других наблюдаемых, которые будут или иметь уже завершено, если вы не правильно поймаете ошибку на внутреннем наблюдаемом. Если вас беспокоит только успешное завершение всех внутренних наблюдаемых, вы можете поймать ошибку снаружи. https://www.learnrxjs.io/learn-rxjs/operators/combination/forkjoin

Есть вероятность, что вы ошибаетесь внутри своей трубы, и эти значения теряются.

Кроме того, я заметил, что вы не возвращать что-нибудь из вашей трубы. Это тоже может быть проблемой.

...