背景
我使用的API在每个函数上使用成功和失败回调 . 我已经在它上面扩展了一个包装层,它使用Promises来解释成功和失败的回调,但是有些函数需要额外的回调作为它们的参数,例如:
Low Level JS API
function addProgressListener(successCallback, failureCallback, progressCallback);
TypeScript Wrapper
function addProgressListenerAsync(progressCallback): Promise<boolean> {
return new Promise((resolve, reject) => {
addProgressListener(
() => resolve(true),
(err) => reject(err),
progressCallback);
});
}
在更高级别,我在async / await样式中使用它,但由于progressCallback将返回我想要附加到ProgressBar组件的多个值,我想将它包装在Observable中 .
问题
如何在Observable中仅包装progressCallback部分?我无法将整个调用包装到addProgressListener,因为它以async / await方式使用,如下所示:
async function process(): Promise<any> {
try {
await addProgressListener((value) => {
// Value = percentage complete
// How do I get this value into an Observable that my component can bind to?
}
// ... do actual processing stuff
}
catch(err) {
}
我以为我可以在调用函数之前创建Observable,并以某种方式在回调中添加"observer.next(value)"调用类似于我在这个问题上收到的答案Wrap API Call in Observable但是查看RxJS文档我不需要't see a way to add the .next() callback to already created instance of an Observable, only inside the Observable.create'的回调(这需要我换行)对addProgressListenerAsync的调用...) .
我也接受任何关于编写包装器以实现此目的的替代方法的建议,尽管Promise样式工作已经完成,因此重写整个事物以使用Observables可能不切实际 .