Я не могу распечатать ни один элемент из массива «valores». Я не знаю, что происходит. Я делаю ошибку синтаксиса? Когда я делаю console.info (valores.length), результаты 0.
var valores = new Array();
fetch("https://mindicador.cl/api")
.then (data => data.json())
.then (data => {
valores["dolar"] = data.dolar.valor;
valores["euro"] = data.euro.valor;
valores["utm"] = data.utm.valor;
valores["uf"] = data.uf.valor;
});
for (var index in valores){
document.write(valores[index]+"<br>");
}
valores должен быть объектом ({}) вместо массива ([])



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы неправильно понимаете, что делает массив. Попробуйте использовать объект вместо массива:
var valores = new Object();
fetch("https://mindicador.cl/api")
.then (data => data.json())
.then (data => {
valores["dolar"] = data.dolar.valor;
valores["euro"] = data.euro.valor;
valores["utm"] = data.utm.valor;
valores["uf"] = data.uf.valor;
for (var key in Object.keys(valores)){
document.write(valores[key]+"<br>");
}
});
Дайте мне знать, если вам нужны дополнительные объяснения. Буду рад уточнить.
Обновлено: стоит отметить, что, как указывали другие, вы также не подчиняетесь обратным вызовам для своих данных.
Ваша проблема - время. Вы даете обещание серверу запрашивать информацию и заполнять массив valores. Но проблема в том, что вы выполняете цикл for сразу после:
for (var index in valores){
document.write(valores[index]+"<br>");
}
Вам нужно обработать ваш document.write внутри метода then
.then (data => {
valores["dolar"] = data.dolar.valor;
valores["euro"] = data.euro.valor;
valores["utm"] = data.utm.valor;
valores["uf"] = data.uf.valor;
for (var index in valores){
document.write(valores[index]+"<br>");
}
});
Данный код никогда не определяет
valores- где и как вы его определяете? Также:fetch()- это асинхронная операция, поэтому в приведенном выше коде циклforбудет выполняться перед любым из обратных вызововthen()послеfetch().