запросить HTTP-вызов клиента и переменную область видимости - PullRequest
0 голосов
/ 11 марта 2019

В хорошей среде облачных функций, внутри вызова request1, я могу получить вывод для bodydayOfTheWeek.

Но вне вызова request1 я получаю вывод как неопределенный.

Я не уверен почему.Даже если переменная let bodydayOfTheWeek объявлена ​​вне вызова request1.

Поэтому не уверен, как переменные области видимости работают в вызове запроса

const request1 = require('request');  
const url = 'http://worldclockapi.com/api/json/pst/now';
let bodydayOfTheWeek: any;
request1(url, { json: true }, (err: any, res: any, body: any) => {
  if (err) { return console.log(err); }


  console.log('inside day of the week');
  bodydayOfTheWeek = body.dayOfTheWeek;
  console.log(bodydayOfTheWeek); <-- works
});

console.log('outside day of the week');
console.log(bodydayOfTheWeek);  <-- undefined

1 Ответ

1 голос
/ 11 марта 2019

(err: any, res: any, body: any) => { } является асинхронным. Следовательно, bodydayOfTheWeek будет неопределенным вне функции, если только вы не получите body.dayOfTheWeek через Callback / Promise. Подробнее, https://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

const request = require('request');  
const url = 'http://worldclockapi.com/api/json/pst/now';

// Callback
function getDay(callback) {
    request(url, { json: true }, (err: any, res: any, body: any) => {
        if (err) {
            return callback(err);
        }

        callback(null, body.dayOfTheWeek);
    });
}

getDay((err, data) => {
    console.log(data);
});


// Promise
function getDay() {
    return new Promise((resolve, reject) => {
        request(url, { json: true }, (err: any, res: any, body: any) => {
            if (err) {
                return reject(err);
            }

            resolve(body.dayOfTheWeek);
        });
    });
}


getDa().then((data) => {
    console.log(data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...