Concurrence
Utilisez les Promesses plutôt que les fonctions de rappel
Les fonctions de rappel génèrent un code peu lisible avec une imbrication excessive. Depuis ES2015/ES6, les Promesses sont désormais un type natif global. Privilégiez-les !
Mauvais exemple :
javascript
import { get } from "request";
import { writeFile } from "fs";
get(
"https://en.wikipedia.org/wiki/Robert_Cecil_Martin",
(requestErr, response, body) => {
if (requestErr) {
console.error(requestErr);
} else {
writeFile("article.html", body, writeErr => {
if (writeErr) {
console.error(writeErr);
} else {
console.log("File written");
}
});
}
}
);Bon exemple :
javascript
import { get } from "request-promise";
import { writeFile } from "fs-extra";
get("https://en.wikipedia.org/wiki/Robert_Cecil_Martin")
.then(body => {
return writeFile("article.html", body);
})
.then(() => {
console.log("File written");
})
.catch(err => {
console.error(err);
});Async/Await sont encore plus propres que les Promesses
Bien que les Promesses soient une alternative propre aux fonctions de rappel, ES2017/ES8 introduit async/await qui simplifie davantage l'écriture. Il suffit de préfixer une fonction avec async, puis d'écrire la logique de façon impérative sans chaînage de then. Adoptez cette syntaxe si vous pouvez tirer parti des fonctionnalités d'ES2017/ES8 !
Mauvais exemple :
javascript
import { get } from "request-promise";
import { writeFile } from "fs-extra";
get("https://en.wikipedia.org/wiki/Robert_Cecil_Martin")
.then(body => {
return writeFile("article.html", body);
})
.then(() => {
console.log("File written");
})
.catch(err => {
console.error(err);
});Bon exemple :
javascript
import { get } from "request-promise";
import { writeFile } from "fs-extra";
async function getCleanCodeArticle() {
try {
const body = await get(
"https://en.wikipedia.org/wiki/Robert_Cecil_Martin"
);
await writeFile("article.html", body);
console.log("File written");
} catch (err) {
console.error(err);
}
}
getCleanCodeArticle()