Printing Problem pt-br Explainer

Explicação de Impressão do problema

Objetivo deste desafio:
Ler uma mensagem de erro impressa do bloco de catch e corrigir o erro.

Passo a passo da solução:
O comando try…catch adicionado na lista não tem alho-poró está capturando e imprimindo um erro. Veja a mensagem de erro:

> Cannot read property 'kilos' of undefined

Nos desafios anteriores, alguns erros da Lista não tem alho-poró e Peso estranho foram corrigidos. Assim analise a linha final no bloco try:

ingredients.forEach(printIngredient());

Dê uma olhada na definição da função printIngredient():

function printIngredient(ingredient) {
  print(ingredient.kilos + ' kilos ' + ingredient.name);
}

A função forEach espera o argumento de uma função retorno de chamada. Mas observe que em vez de passar uma função retorno de chamada, o código na verdade executa printIngredient() e passa o resultado para forEach(). printIngredient() espera um argumento, mas nenhum é fornecido. É por isso que o código cria um erro. Se o parâmetro ingredient for indefinido, o código não pode acessar a propriedade kilos.

Basta remover a chamada de função e substituí-la por uma função retorno de chamada printIngredient. Observe que não existe nenhum parêntese dessa vez. Agora, em vez de executar a função printIngredient() uma vez sem nenhum argumento, ela será executada para cada elemento de ingredients, passando os elementos como argumento. Agora o código pode encontrar as propriedades que ele espera.

Solução do código de exemplo:
(Toque abaixo para revelar)

import {addIngredient} from 'cookbook';
import {itemWeight, totalWeight} from 'debugging';

let ingredients = [
  {
    name: 'potatoes',
    kilos: 4,
  },
  {
    name: 'carrots',
    kilos: 2,
  },
  {
    name: 'onions',
    kilos: 1,
  },
  {
    name: 'chickens',
    kilos: 2,
  },
];

let leeks = {name: 'leeks', kilos: 1.5};

function printTotalWeight() {
  let total = 0;
  for (let i of ingredients) {
    total += i.kilos;
  }
  print('Total ingredient weight: ' + total + ' kilos');
}

function printIngredient(ingredient) {
  print(ingredient.kilos + ' kilos ' + ingredient.name);
}

function prepareRecipeCards() {
  try {
    addIngredient(leeks);
    printTotalWeight();
    print('Ingredients:');
    ingredients.forEach(printIngredient);
  } catch (e) {
    console.log(e);
  }
}

prepareRecipeCards();

Código adicional Código adicional (código oculto executado antes do código do desafio):

function _addIngredient({name, kilos}) {
  if (isNaN(kilos)) {
    throw new Error(`kilos must be a number. got ${kilos} instead`);
  }
  ingredients.push({
    name,
    kilos,
  });
  console.log(`Added ${name}, ${kilos} kilos, to the ingredients list.`);
}

defineModule(
    'cookbook',
    {
      addIngredient: _addIngredient,
    }
);

defineModule(
    'debugging',
    {
      itemWeight: 'Item Weight: ',
      totalWeight: 'Total Weight: ',
    }
);