ад обратного звонка

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");
});

Сейчас так много элегантного и удобочитаемого плоского организованного кода, не так ли?