Skip to content

Latest commit

 

History

History
52 lines (42 loc) · 1.85 KB

M2A_79.md

File metadata and controls

52 lines (42 loc) · 1.85 KB

M2#A79 - ES7 - async / await

O javascript é um single thread.

Quando utilizamos requisicões ou leitura de disco o ideal é que seja utilizado o callback das funcões responsáveis por quê é atravéz delas que nosso código fica um asyncrono assim não travando a nossa aplicacão.

Hoje uma forma de fazer um código mais legível é utilizando Promise

Sobre

O asyn aguarda o resultado de uma Promise para executar um código expecífico sem bloquear a thread.

O await espera o resulado da Promise para ser executado

Exemplo

No caso abaixo o resultado vai ser atribuído a variável result esperando primeiro o resultado de readFile

const readFile = (filePath, charset) => new Promise((resolve, reject) => {
  fs.readFile(filePath, charset, (err, result) => {
    if (err) return reject(err)
    resolve(result)
  })
})

const read = async () => {
	const result = await readFile(path.join(__dirname, '..', 'package.json'), 'utf8')
	const dependecies = JSON.parse(result).dependencies)
	console.log(myDependencies))
}

Para tratarmos o erro utilizamos o try catch que é um modo syncrono do JS

const read = async () => {
	try {
		const result = await readFile(path.join(__dirname, '..', 'package.json'), 'utf8')
		const dependecies = JSON.parse(result).dependencies)
		console.log(myDependencies))
	} catch (error) {
		console.log('ERROR:', error)
	}
}

Oberservacão sobre Promise

Aync pode substituir a forma de ser utilizado o construtor Promise deixando o código mais legível e atribuindo ele a uma variável como exemplo

readFile(path.join(__dirname, '..', 'package.json'), 'utf8')
  .then((result) =>  JSON.parse(result).dependencies) // como teve o sucesso
  .then((myDependencies) => console.log(myDependencies)) // abaixo temos o retorno do primeiro then aqui
  .catch((error) =>  console.log('ERROR: ', error))