Nodejs проблема области видимости переменной запроса - PullRequest
1 голос
/ 09 марта 2020

Я немного новичок в Nodejs. В следующем коде я получаю данные из API.

request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
    if (err) {
        console.log("Error = " + err);
    }
    else {
        let parsedBody = JSON.parse(body);
        if (parsedBody.error_description) {
            console.log("Error = " + parsedBody.error_description);
        }
        else {
            // testFunc(AccessToken);
            test = "Success!";
            testFunc(test);
        }
    }
});

function testFunc(success){
    Token = success;
    console.log(Token);
}

// this code gives the error "Token is not defined" \/
console.log(Token);

в запросе post я делаю переменную "test". Я хочу иметь возможность использовать это как глобальную переменную, чтобы я мог использовать его в запросе get.

Когда я console.log() "Token" в "testFun c", он будет регистрировать его правильно. Но когда я console.log() вне функции, это выдает ошибку Token is not defined.

Как я могу сделать переменную "Token" или "test" глобальной, чтобы я мог использовать ее в другом запросе get?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 09 марта 2020

ваш request.post работает асинхронно, вы можете использовать lib-1001 *

const request = require("request-promise"); 

для запроса-обещания и изменить его на

var result = await request(options);

или для получения дополнительной информации прочитайте эту статью https://blog.risingstack.com/mastering-async-await-in-nodejs/

1 голос
/ 09 марта 2020

your Token является локальной переменной в testFunc

function testFunc(success){
    Token = success;
    console.log(Token);
}

, пытаясь определить Token как глобальную переменную, которую вы можете поставить после всех требований импорта (...) или выше request.post

let Token; //this is global declared variable

, а также ваш console.log не может быть таким же, как ваш код

как ваш вопрос I want to be able to use this as a global variable so i can use it in a get request.

, поэтому вам нужно поставить свой console.log внутри request.get

что-то вроде

request.get('xxxxxx', , function(err) {
    console.log("Token is " , Token);
});


...