繁体   English   中英

在函数外部调用时,在函数中定义的全局变量显示未定义

[英]Variable global defined in a function is showing undefined when called outside the function

我已经通过使用let定义了一个函数,然后创建了一个函数。 此函数将发布请求发送到api,并以json格式获取数据。 在此函数中,我使用了一个变量并将其设置为等于响应的值。

当我使用此功能时,一切正常。 当我在函数外使用此变量时,我得到的值不确定''

下面是我的代码

var request = require("request");

let conkey = 'Some Value', //varialble for consumer_key
consec = 'Some Value', //varialble for  consumer_secret
tkn = 'Some Value', //varialble for token
tknsec = 'Some Value',
value;


function myFunction() {
request.post('someurl', {
    oauth: {
        consumer_key: conkey,
        consumer_secret: consec,
        token: tkn,
        token_secret: tknsec
    },body: {"skillIds": [some value]
},json: true}, function (err, res, body) {
    if (err) throw new Error(err);
    value = body.sonething.something;
    console.log(value);  ////THIS WORKS FINE
});
};

myFunction();
console.log(value);  ////This prints Undefined

发生这种情况是因为request.post是异步操作。 这意味着它将最终但不是立即完成。 这就是为什么request.post接受一个函数(称为回调函数)的原因。

function (err, res, body) { ... }仅在请求完成时被调用。

让我们按顺序遍历您的代码...它将首先:

1-创建变量。

2-定义myFunction

3-调用myFunction myFunction将在request.post调用。 但是request.post是异步的。 这意味着它将在得到结果之前立即返回。 myFunction现在退出。

4- console.log(value); 现在被调用,但是在这个时间点, value是不确定的。

5-请求完成后, function (err, res, body) (在request.post调用中定义)将执行

value = body.sonething.something;
console.log(value);

现在将在此处定义value

希望这可以帮助。

您可以尝试使用基于承诺的js的fetch api ,它将帮助您解决问题。 或其他一些侧面库,例如axios

问题在于,您的代码不会在响应更改Value的“值”之前等待接收请求和console.logs。 这就是为什么我认为您不确定。

谢谢大家的回答。 我可以通过在函数外部创建一个空对象来解决该问题,并通过在函数中将值插入到空对象中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM