Q Promises

by John Allan

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.2/q.js"></script>

JavaScript

var d;

function do1 () {
	console.log('do1 says: ', 'go');
  return Q.fcall(function () {
		//Error:
    //throw new Error('do1 failed');
    //Success:
    return 'do1 passed this message';
  });
}

function do2 (msg) {
	console.log('do2 says: ', msg);
  return Q.fcall(function () {
  	return 'update from do2';
  });
}

var do3Message = 'do3 passed this message'

function do3 (msg) {
	console.log('do3 says: ' + msg);
  return Q.fcall(function () {
    return do3Message;
  });
}

function do3Error (msg) {
	console.log('do3Error says:', msg);
}

function do4(msg) {
	console.log('do4 says: ' + msg);
  return Q.fcall(function () {
    return false;
  });
}

function doAsync () {
	var d = Q.defer();
  console.log('doAsync says: ', 'call async')
  setTimeout(function () {
  	d.resolve('async complete');
  }, 700);

  return d.promise;
}

function success (msg) {
	console.log('success says: ' , msg);
}

function error (err) {
	console.log('error says: ' , err);
}

do1().then(do2('passed')).then(do3, do3Error).then(do4).then(doAsync).then(success, error).done();