我获得了这个 API:
function doSomeWork(callbacks : {
success ?: (result : SuccessCallbackResult) => void,
fail ?: (result : FailCallbackResult) => void,
complete ?: (result : CompleteCallbackResult) => void
}) : Task
通过一个简单的包装器,我得到了一个返回
Promise
: 的函数
function doSomeWorkAsync() : Promise<SuccessCallbackResult> {
return new Promise((resolve, reject) => {
const callbacks = {
success: resolve,
fail: reject,
};
doSomeWork(callbacks);
});
}
但是我就这样丢失了
Task
返回的doSomeWork
。
我可以以某种方式包装 API,以便同时获得
Promise
和 Task
吗?像这样的东西:
function doSomeWorkAsync() : [Promise<SuccessCallbackResult>, Task] {
// implementation
}
我需要
Task
同步返回,因为我可能需要它 .abort()
本身。
我可以以某种方式包装 API,以便同时获得
和Promise
吗?Task
是的,
new Promise
回调是同步执行的:
function doSomeWorkAsync(): [Promise<SuccessCallbackResult>, Task] {
let task;
const promise = new Promise((success, fail) => {
task = doSomeWork({ success, fail });
});
return [promise, task];
}
(如果 TypeScript 在使用之前不知道
task as Task
已被赋值,则可能需要 task
断言)