ад обратного звонка
Javascript ад обратных вызовов выглядит как неотъемлемая проблема языка js, из-за его асинхронной природы написание функций обратного вызова и вложение их вместе выглядит единственным способом кодирования для новичка.
Затем он дал программистам некоторый код беспорядка, если он упорствует в написании вложенного кода обратного вызова, и эти коды беспорядка называются ад обратных вызовов.
fs.readFile("file.json", function(err, val) { if( err ) { console.error("unable to read file"); } else { try { val = JSON.parse(val); console.log(val.success); } catch( e ) { console.error("invalid json in file"); } } });
Обещать
Promise — это новая функция ES6 (ECMAScript 2015), которая используется для отложенных и асинхронных вычислений. Обещание также является предложением, которое представляет собой конечный результат асинхронной операции.
Одним словом, чтобы решить пресловутую головоломку ада обратного вызова.
var fs = require("fs"); function readFilePromise() { return new Promise(function(fulfill, reject) { fs.readFile("file.json", function(error, content) { if (error) reject(error); else fulfill(content); }); }); } readFilePromise().then(JSON.parse).then(function(val) { console.log(val.success); }) .catch(SyntaxError, function(e) { console.error("invalid json in file"); }) .catch(function(e) { console.error("unable to read file"); });
синяя птица
Bluebird — еще одна популярная и более ранняя реализация предложения Promise вместо недавней собственной поддержки ES6.
И это все еще также рекомендуется.
var Promise = require("bluebird"); var fs = require("fs"); Promise.promisifyAll(fs); fs.readFileAsync("test.json").then(JSON.parse).then(function(val) { console.log(val.success); }).catch(SyntaxError, function(e) { console.error("invalid json in file"); }).catch(function (e) { console.error("unable to read file"); });
Сейчас так много элегантного и удобочитаемого плоского организованного кода, не так ли?