Skip to content

Latest commit

 

History

History
105 lines (77 loc) · 2.59 KB

5.promises.md

File metadata and controls

105 lines (77 loc) · 2.59 KB
title
Promises

Promises

Vefforritun

Ólafur Sverrir Kjartansson, [email protected]


Promises & Node.js

  • Node.js hefur stuðning við promises sem gerir það auðveldara að vinna með async kóða
  • Frá og með útgáfu 8 getum við notað util.promisify til að breyta callback API í promise API
  • Frá og með útgáfu 14 getum við notað fs/promises fyrir promise API ofan á fs

util.promisify

const util = require('util');
const fs = require('fs');

const readFileAsync = util
  .promisify(fs.readFile);

readFileAsync('data.txt')
  .then((data) => {
    console.log(data.toString('utf8'));
  })
  .catch((err) => {
    console.error(err);
  });

async & await

  • Getum notað async og await sem getur flatt kóðann okkar
  • Verðum að hafa async fall utan um kóða, t.d. með main falli
    • Þangað til í nodejs 14.8 þegar stuðning við top level await var bætt við ef við notum ES modules
  • Það fall verður að promise, þurfum að setja catch á það til að grípa allar villur

  • Verðum að passa að nota async og await á réttum stöðum og með try catch
  • Promise eru truthy, getur komið okkur í vandræði!

const util = require('util');
const fs = require('fs');

const rfAsync = util.promisify(fs.readFile);
async function main() {
  let data = '';
  try {
    data = await rfAsync('data.txt');
  } catch (e) {
    console.error('error', e);
  }
  console.log(data.toString('utf8'));
}
main()
  .catch((err) => { console.error(err); });

const fs = require('fs/promises');

async function main() {
  let data = '';
  try {
    data = await fs.readFile('data.txt');
  } catch (e) {
    console.error('error', e);
  }
  console.log(data.toString('utf8'));
}
main()
  .catch((err) => { console.error(err); });

Villur sem ekki eru gripnar

  • Ef við skrifum forrit sem nota promises og async await er líklegt að villa verði ekki meðhöndluð á einhverjum tímapunkti
  • Fáum UnhandledPromiseRejectionWarning frá Node.js
    • Í framtíðinni mun það stöðva keyrslu á forriti

unhandledRejection