函数包装返回函数而不是实际对象

问题描述

我正在尝试围绕异步函数创建包装器,当我调用函数时,总是得到一个函数,而不是想要得到的对象。

function wrap<T extends Function>(fn: T){
    return <any> async function (...args) {
        let result = await fn(...args)
        return {
            statusCode: 200,body: JSON.stringify({
                data: result

            }),}
    };
}

let main = async (test: string) => {
    console.log(`calling api  ${test}`);
    return wrap(() => {
        console.log("")
        return {
            foo: "bar",}
    });
};

main("test").then((res)=>{
    console.log(res)
    console.log(typeof res)  // <-- function 
})

我想念什么?
任何帮助将不胜感激。

解决方法

您没有调用该函数,只是将其包装在括号中。我相信这就是您所需要的。

function wrap<T extends Function>(fn: T){
    return <any> async function (...args) {
        let result = await fn(...args)
        return {
            statusCode: 200,body: JSON.stringify({
                data: result

            }),}
    };
}

let main = async (test: any) => {
    console.log(`calling api  ${test}`);
    return wrap(() => {
        console.log("")
        return {
            foo: "bar",}
    })();
};

main("test").then((res)=>{
    console.log(res)
    console.log(typeof res)  // <-- object
})