Пара готачей здесь.
Во-первых, с разрушением, которое вы пытаетесь.В области действия анонимной функции, в которой вы обрабатываете ответ, let
повторно определяет gasAve
.Это отдельно от исходного объявления, и, таким образом, значение никогда не было присвоено вашему первому объявлению gasAve
.Избавление от того, что let
в вашей операции деструктуры правильно назначит значение в ожидаемой области.
Во-вторых, функция, обрабатывающая ваш ответ, выполняется асинхронно, то есть после выполнения вызова ajax и ответаполучено.console.log
вне анонимного объявления выполняется до того, как значение будет присвоено в хронологическом порядке.Самый простой способ избежать этой проблемы - выполнить всю работу в контексте функции обработки ответа или из вызываемой из нее функции.Примерно так:
let gasAve;
let settings = {
"async": true,
"crossDomain": true,
"url": "https://data.colorado.gov/resource/xyh2-p9cg.json?%24%24app_token=gNqVzSHJ7pWovzVu8pRHdiMHe&%24select=avg(allgradesgasprice)&%24where=date%20between%20'2017-01-01T12%3A00%3A00'%20and%20'2017-12-31T11%3A59%3A59'",
"method": "GET",
}
$.ajax(settings).done(function (response) {
console.log(response); // logs [Object {avg_allgradesgasprice="2.4292307692307692"}]
[{"avg_allgradesgasprice":gasAve}] = response; // destructure the object
console.log(gasAve); // Within the block, I get the value 2.429....
displayStuff();
});
function displayStuff() {
console.log(gasAve)
}