This question already has answers here:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
                                
                                    (6个答案)
                                
                        
                                4年前关闭。
            
                    
以下是我的代码,它们向具有主机78.154.17.70,端口8080和路径/csrftoken.json的Web服务器发出http请求。

我使用request.get从服务器获取数据。我能够以以下格式获取数据,该数据为Json data

 {
 "apiVersion": "1.0",
 "data": {
       "csrf": "ajbgajbgjabbjbjbab"
  }
}


我全局声明了两个变量var CSRFTokenValue;var respJson;。在request.get中,我将这些变量用作:respJson存储解析数据,而CSRFTokenValue存储


  “ csrf”:“ ajbgajbgjabbjbjbab”标记值为“ ajbgajbgjabbjbjbab”


表示CSRFTokenValue将在其中存储“ ajbgajbgjabbjbjbab”。

现在,当我在CSRFTokenValue内部登录request.get时,它将给我“ ajbgajbgjabbjbjbab”,但是当我在外部登录时,它将给我undefined。

我需要在CSRFTokenValue内的quesryString中使用request.post来发布数据。

我不知道如何全局获取tokenValue?

var request = require('request');

var CSRFTokenValue;
var respJson;
request.get('http://78.154.17.70:8080/csrftoken.json', function (e, res, body){
    respJson = JSON.parse(body);
    CSRFTokenValue = respJson.data.csrf;
    console.log('GET success:' + CSRFTokenValue);
});

console.log('GET token Globaly:' + CSRFTokenValue);

request.post('http://78.154.17.70:8080/Login/post.json?_csrf=' + CSRFTokenValue, {
    'name' : 'name',
    'password' : 'pass'
}, function (res) {
    console.log('success');
});

最佳答案

这是因为发出初始请求时,它是异步完成的。当您的请求在后台完成时,程序将右移到控制流中的下一个语句。请求完成后,将设置CSRFTokenValue,但是您要在请求完成之前打印出该值,因此它是undefined

试试这个吧。

var request = require('request');

request.get('http://78.154.17.70:8080/csrftoken.json', function (e, res, body){
    var respJson = JSON.parse(body);
    var CSRFTokenValue = respJson.data.csrf;
    console.log('GET success:' + CSRFTokenValue);

    request.post('http://78.154.17.70:8080/Login/post.json?_csrf=' +     CSRFTokenValue, {
        'name' : 'name',
        'password' : 'pass'
    }, function (res) {
        console.log('success');
    });
});


从第一个请求获得令牌后,这将发出第二个请求。

另外,请查看asynchronous programming

10-06 04:14