如何在保留返回值的同时承诺基于回调的函数?

问题描述 投票:0回答:1

我获得了这个 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()
本身。

javascript typescript asynchronous ecmascript-6 promise
1个回答
0
投票

我可以以某种方式包装 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
断言)

© www.soinside.com 2019 - 2024. All rights reserved.