Node.js 如何提取Nodejs回调函数外部的变量值

Node.js 如何提取Nodejs回调函数外部的变量值,node.js,variables,callback,scope,request,Node.js,Variables,Callback,Scope,Request,我无法获取回调代码之外的响应值。它在外部返回未定义的结果,而在回调中返回正确的结果 function doCall(urlString, callback) { request.get( urlString, null, null, (err, data, result) => { var statusCode = result.sta

我无法获取回调代码之外的响应值。它在外部返回未定义的结果,而在回调中返回正确的结果

function doCall(urlString, callback) {
    request.get(
        urlString,
        null,
        null,
        (err, data, result) => {                              
            var statusCode = result.statusCode;
            return callback(data);
        }
    );
}

const apiResponse = doCall(urlString, function(response) {
    console.log('***************************' + response); //Prints correct result
    return JSON.parse(response);
});

console.log('+++++++++++++++++++++++++' + apiResponse); //Prints undefined

如果希望代码具有同步外观,请将所有内容包装在异步函数中:

(async (){
    async function doCall(urlString, callback) {
        return await request.get(urlString, null, null); // or store in a variable and return modified response
    }
    const apiResponse= await doCall(urlString, (response) => {
        console.log('response', response);
        return JSON.parse(response);
    });
    console.log('apiResponse', apiResponse);
})()
函数doCall(urlString){
返回新承诺((解决、拒绝)=>{
请求(
URL字符串,
无效的
无效的
(错误、数据、结果)=>{
如果(错误)拒绝(错误);
var statusCode=结果.statusCode;
解析(数据);
});
});
}
异步函数myBackEndLogic(){
试一试{
const result=await doCall(urlString);
控制台日志(结果);
//如果需要,返回JSON.parse(结果)
}捕获(错误){
console.error('error:');
控制台错误(error);
}
}

myBackEndLogic()您需要使用承诺或异步/等待。您的函数
doCall
不返回任何内容,因此影响其返回到
apiResponse的“值”
将其值设置为
undefined
。但doCall返回的是“返回回调(数据)”。但这不正确吗?@Jeff使用async将如何帮助我获得函数外部的值。您需要了解事件循环和async在节点中的工作方式。您需要从承诺中设置var response=await getResponse()之类的内容。非常感谢您的分享。我可以运行代码了。欢迎。阅读我提供的链接。这将有助于消除nodejs中的许多困惑。我还强烈推荐Udemy()上的这门课程。即使你有很好的编程背景,它也涵盖了许多与nodejs独特/不同的东西。谢谢Jese和Jeff。这些链接非常有用。我非常感激。非常感谢。