JSFiddle - React, Tailwind, and code Playground

JavaScript

function fn(n) {
	return new Promise(function(resolve, reject) {
		setTimeout(function() {
			if(n >= 0) {
				console.log(n);
				resolve(n || 0);
			} else {
				reject(new Error(n || 0));
			}
		}, 500);
	});
}
function fError(error) {
	throw error;
}
function finalErrorHandler(error) {
    console.log('Final: ' + error.message);
}

var Function1 = fn.bind(null, 1);
var Function2 = fn.bind(null, -2);// <<<<<< negative 2
var Function3 = fn.bind(null, 3);
var Function4 = fn.bind(null, 4);
var errorHandler1 = fError;
var errorHandler2 = fError;
var errorHandler3 = fError;
var errorHandler4 = fError;

Promise.resolve()
.then(function() { return Function1().catch(errorHandler1); })
.then(function() { return Function2().catch(errorHandler2); })
.then(function() { return Function3().catch(errorHandler3); })
.then(function() { return Function4().catch(errorHandler4); })
.catch(finalErrorHandler);