Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ForEach - parâmetro

Para o código abaixo da aula de AJAX no curso de Javascript, paciente está sendo passado como parâmetro na função anônima que está dentro do forEach.

Testei com outro nome "x" e também funcionou,

Não entendi qual a necessidade de passar uma variável genérica e por que não funciona quando usamos o this?

Quando utilizo o this o nome e gordura retorna [object HTMLInputElement]

var botaoAdicionar = document.querySelector("#buscar-pacientes");

botaoAdicionar.addEventListener("click", function(){ console.log("Buscando pacientes...");

var xhr = new XMLHttpRequest();

xhr.open("GET", "https://api-pacientes.herokuapp.com/pacientes");

xhr.addEventListener("load", function() { var resposta = xhr.responseText;

var pacientes = JSON.parse(resposta);

pacientes.forEach(function(paciente) { adicionaPacienteNaTabela(paciente); }); });

xhr.send(); });'

1 resposta
solução!

Olá Luiz, O que ocorre é um problema de escopo, quando a função anônima é chamada dentro do foreach ela é executada em outro escopo (é usada uma chamada call, neste caso o call não executa no mesmo escopo, sendo necessário fazer um bind com o seu this para que ele use o seu this) que não o escopo onde foi declarada, neste escopo o this se refere a outro objeto.

O foreach aceita segundo o MDN MDN-Array Foreach dois parametros, sendo eles o callback e o thisArg.

No seu caso caso quisesse usar o this dentro da função anónima você poderia passar o this como segundo parametro.

Mais importante no entanto é entender que você não está passando uma variavel genêrica e sim está ficando de acordo com uma API.

A função foreach recebe dois parametros, sendo eles uma função de callback e um argumento this para usar como escopo, no javascript algumas APIs foram desenhadas para não quebrarem quando você não passa alguns parametros, mas o fato é que a função de callback pode aceitar até 3 parametros sendo eles:

valor corrente - O primeiro parametro é o item da array que está sendo usado na interação do loop. index - é o número que representa a posição na array. array - é o array que está sendo usado no loop.

Dependendo da sua necessidade você pode usar os três, o código abaixo por exemplo adiciona ao seu código o index, além de adicionar um item a tabela ele vai exibir uma mensagem na linha de:

Paciente 0: Jéssica

var botaoAdicionar = document.querySelector("#buscar-pacientes");

botaoAdicionar.addEventListener( "click",  function(){ 
  console.log("Buscando pacientes...");

  var xhr = new XMLHttpRequest();

  xhr.open("GET", "https://api-pacientes.herokuapp.com/pacientes");

  xhr.addEventListener( "load", function() { 
    var resposta = xhr.responseText;
    var pacientes = JSON.parse(resposta);
    pacientes.forEach( function(paciente, index) { 
      adicionaPacienteNaTabela(paciente);
      console.log("Paciente "+index+": "+paciente.nome);
    }); 
  });
  xhr.send(); 
});

Por isso é importante notar que você não está passando uma variável genérica e sim um argumento a uma função.