将对象值返回给父函数

时间:2018-08-27 00:41:18

标签: javascript node.js asynchronous

我一直在与下面的代码作斗争。我实际上想知道如何在主函数“ myfunc()”中返回内部对象“ result”的值。

function myfunc(){

        con.connect(function(err){

            con.query(q,function(err){

                var result = 'mY Result';
            });

        });

    }

我只想将“结果”分配给“ myfunc()”。谢谢

1 个答案:

答案 0 :(得分:2)

您可以采用以下方法:

// add async here to denote the method as awaitable to callers
async function myfunc(){

    // Wrap the inner logic with a promise. This allows you
    // return a result, when it is available
    return new Promise((resolve) => {

        con.connect(function(err){

            con.query(q,function(err){

                // Once the inner functions complete, and
                // a result is available, we return that
                // result to external code by passing the
                // result to the 'resolve' function like
                // so:
                var result = 'mY Result';
                resolve(result)
            });

        });
    })
}

现在,根据项目的设置方式,您通常会使用两个选项来调用myfunc()

// Option #1
const queryResultOption1 = await myfunc()

// Option #2
myfunc().then(function(queryResult) {

    // Use queryResult here
})

通常来说,选项#2是“较旧的”处理方式,但提供了更广泛的支持,而选项#1是“较新的”处理方式,并且倾向于易于阅读,推理和使用的代码,等

更新

请注意,使用Option #2时有一些限制。例如,您只能在myfunc()方法的上下文中用await关键字调用async

换句话说,这意味着如果您要呼叫的地方未标记为await myfunc(),则不能直接呼叫async。因此,例如,要直接在nodejs入口脚本中使用此方法,您需要执行以下操作:

(async function () {

    const result = await myfunc()

})()

希望这会有所帮助!