У меня есть обещание, что после его выполнения создаст наблюдаемый объект и подписывается на него. Что мне нужно сделать, так это преобразовать это обещание в наблюдаемый и вернуть этот наблюдаемый объект для подписки в другом месте (который будет включать внутренний наблюдаемый). Я использовал from
, чтобы преобразовать обещание в наблюдаемое, а затем использовал concatMap
, чтобы связать внутреннее наблюдаемое. Однако в начале concatMap
я получаю ошибку в моем коде для строковой переменной xfdfString
, которую я пытаюсь получить из исходного обещания. Возможно, внутренняя наблюдаемая моя новая функция фактически не возвращает наблюдаемую? Я пробовал несколько вещей, чтобы решить эту проблему, но безуспешно, поэтому любые идеи будут очень признательны.
Ошибка:
Argument of type '(xfdfString: string) => void' is not assignable to parameter of type '(value: string, index: number) => ObservableInput<any>'.
Type 'void' is not assignable to type 'ObservableInput<any>'.ts(2345)
Исходная функция:
save() {
const { annotManager } = this.wvInstance;
annotManager.exportAnnotations({ links: false, widgets: false }).then(xfdfString => {
const requestId = (<SignatureDocumentData>this.task.actionData).requestId;
const data: SignDocument = { encodedDocument: encodeBase64(xfdfString) };
this.documentService.signDocument(requestId, data)
.pipe(
switchMap(signResponse => this.workflowService.completeAction(this.task.id)),
switchMap(nextTask => {
if (!nextTask) {
return this.workflowService.completeFolder();
} else {
return observableOf(nextTask);
}
}),
).subscribe(response => console.log(response));
});
}
Моя попытка использовать наблюдаемую более высокого порядка, чтобы вместо этого вернуть одну наблюдаемую:
save(): Observable<any> {
const { annotManager } = this.wvInstance;
const docViewerobservable = from(annotManager.exportAnnotations({ links: false, widgets: false }));
return docViewerobservable.pipe(
concatMap(xfdfString => {
const requestId = (<SignatureDocumentData>this.task.actionData).requestId;
let data = { encodedDocument: encodeBase64(xfdfString) };
this.documentService.signDocument(requestId, data)
.pipe(
switchMap(signResponse => this.workflowService.completeAction(this.task.id)),
switchMap(nextTask => {
if (!nextTask) {
return this.workflowService.completeFolder();
} else {
return observableOf(nextTask);
}
})
);
})
);
}