Jestem trochę nowy w Nodejs. W poniższym kodzie pobieram dane z 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);

W żądaniu postu ustawiam zmienną „test”. Chcę móc używać tego jako zmiennej globalnej, aby móc go użyć w żądaniu get.

Kiedy console.log() "Token" w "testFunc" zarejestruje go poprawnie. Ale kiedy console.log() znajduje się poza funkcją, daje to błąd Token is not defined.

Jak mogę sprawić, aby zmienna „Token” lub „test” była globalna, aby móc jej użyć w innym żądaniu pobierania?

Z góry dziękuję!

1
MrMilkshake 9 marzec 2020, 14:08

2 odpowiedzi

Najlepsza odpowiedź

Twój request.post działa asynchronicznie, możesz użyć request-promise lib

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

I zmień na

var result = await request(options);

Lub po więcej informacji przeczytaj ten artykuł https://blog.risingstack.com/mastering-async-await-in -nodejs /

1
har17bar 9 marzec 2020, 11:21

Twoja Token jest zmienną lokalną na testFunc

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

Spróbuj zdefiniować Token jako zmienną globalną możesz mimo wszystko wstawić wymagania importu (...) lub powyżej request.post

let Token; //this is global declared variable

A także Twój console.log nie może być taki jak Twój kod

Jako Twoje pytanie I want to be able to use this as a global variable so i can use it in a get request.

Więc musisz umieścić swoje console.log wewnątrz request.get

Coś jak

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


1
app_zone 9 marzec 2020, 11:21