我一直在与下面的代码作斗争。我实际上想知道如何在主函数“ myfunc()”中返回内部对象“ result”的值。
function myfunc(){
con.connect(function(err){
con.query(q,function(err){
var result = 'mY Result';
});
});
}
我只想将“结果”分配给“ myfunc()”。谢谢
答案 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()
})()
希望这会有所帮助!