//junio del 2017

//es8 una manera de transformar un objeto a una matriz
const data = {
  frontend: 'Adrian',
  backend: 'Adranuz',
  design: 'Vlady'
}
const entries = Object.entries(data) //objet to matriz
console.log(entries)
console.log(entries.length) //ya disponemos de .length
//es8 
//valores de un objeto a un arreglo
const data = { //trailing comma
  frontend: 'Adrian',
  backend: 'Adranuz',
  design: 'Vlady'
}
const values = Object.values(data) //object to array
console.log(values)
console.log(values.length)
//es8
//antemponer algo antes del string
const string = 'hello'
console.log(string.padStart(7, 'hi'))
console.log(string.padEnd(12, ' ------'))
console.log('food'.padEnd(12, ' -------'))
//es8
//la idea de helloWorld es que sea parecido a una peticion de una api, 
//en lo que mandara la respuesta de la peticion despues de 3 segundos de habes sido hecha
const helloWorld = () => {
  return new Promise((resolve, reject) => {
    (true)
    //setTimeout le da a la peticion sierto tiempo para responder
      ? setTimeout(() => resolve('Hello World'), 3000)
      //si no se obtiene lo esperado manda de regreso error
      : reject(new Error('Test Error'))
  })
}

//aqui hacemos la peticion a la funcion de la promesa
const helloAsync = async () => { //se declara asincrona
  const hello = await helloWorld()
  console.log(hello)
}
helloAsync()

// aplicar async await correctamente
const anotherFunction = async () => {
  try {
    const hello = await helloWorld()
    console.log(hello)
  } catch (error) {
    console.log(error)
  }
}
anotherFunction()
// promesas + async await
async function getAllUserInfo(id) {
    	const user = await fetch('api/user/' + id)
    
    	const userResponse = await Promise.all(user.links.map(link => fetch(link)))
    
    	const userData = await Promise.all(userResponse.map(response => response.json()))
    
    	return userData
    }