Example 3-15. Manage response time using Promise.race()


function getData() {
	var timeAllowed = 500; // milliseconds
	var deadline = Date.now() + timeAllowed;

	var freshData = ajax(/*someurl*/);
	
	var cachedData = fetchFromCache().then(function (data) {
		return new Promise(function (resolve) {
			var timeRemaining = Math.max(deadline - Date.now(), 0);
			setTimeout(function () {
				resolve(data);
			}, timeRemaining);
		});
	});

	var failure = new Promise(function (resolve, reject) {
		setTimeout(function () {
			reject(new Error('Unable to fetch data in allotted time'));
		}, timeAllowed);
	});
	return Promise.race([freshData, cachedData, failure]);
}