Как получить ответ от самого POST-вызова узла nodejs? - PullRequest
0 голосов
/ 24 декабря 2018

Я использовал следующий пример кода для вызова API, который возвращает токен доступа.

var responsedata = '';

unirest.post('http://sandbox.com/api/getToken')
  .headers({'Content-Type': 'application/x-www-form-urlencoded'})
  .send('apiKey=xewsdw232')
  .send('username=theuser')
  .end(function (response) {

    console.log(response.body);
    responsedata = response.body;
    
    
  });

console.log(responsedata);

Ответ

{ data: { token: 'JhbGciOiJIUzI1NiJ9',transID:'00582',errorCode: '00',errorMessage: '' } }

Я получаю ответ, который регистрируется в консоли, но не можетприсвоить его переменной, чтобы я мог работать с ней вне функции вызова.Я борюсь с пониманием того, как обратные вызовы работают в JavaScript.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

HTTP-запросы носят асинхронный характер.Вы не получаете ответ мгновенно, что означает, что javascript не ожидает ответа, вместо этого выполнение продолжается, и всякий раз, когда ответ возвращается, вызывается обратный вызов.Если вы хотите вернуть этот ответ, инкапсулируйте этот код в функцию и верните разрешенное обещание.

function getToken(){
return new Promise((resolve,reject) => {
unirest.post('http://sandbox.com/api/getToken')
.headers({'Content-Type': 'application/x-www-form-urlencoded'})
.send('apiKey=xewsdw232')
.send('username=theuser')
.end(function (response) {
if(response.error){return reject(error)}
return resolve(response.body); 
});
})
}
getToken().then((body) => console.log("success", body)).catch((error) => 
console.log("error", error))
0 голосов
/ 25 декабря 2018

JS работает асинхронно.Вы пытаетесь получить значение до его назначения. Проверьте этот пример.Вы делаете запрос.это займет время, но ваша программа не остановится.поэтому вы не можете получить значение вне функции https://repl.it/repls/OutgoingFreshOutput

...