最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin18浏览0评论

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

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

我已经使用let定义了一个函数,然后创建了一个函数。此函数向api发送post请求并以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 - 打电话给myFunctionmyFunction将拜访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

希望这可以帮助。

发布评论

评论列表(0)

  1. 暂无评论