我使用的API在每个函数上使用成功和失败回调。我在它上面扩展了一个包装层,它使用Promises来解释成功和失败的回调,但是有些函数需要额外的回调作为它们的参数,例如:
低级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文档我没有看到将.next()回调添加到已创建的Observable实例的方法,只是在Observable.create的回调中(这需要我将调用包装到addProgressListenerAsync ...)。 p>
我也接受任何关于编写包装器以实现此目的的方法的建议,尽管Promise样式工作已经完成,因此重写整个事物以使用Observable可能不切实际。