demo/bower_components/ko.plus/dist/ko.plus.js
function () {
		//check if we are able to execute
		if (!canExecuteWrapper.call(options.context || this)) {
			//dont attach any global handlers
			return instantDeferred(false, null, options.context || this).promise();
		}

		//notify that we are running and clear any existing error message
		isRunning(true);
		failed(false);
		failMessage('');

		//try to invoke the action and get a reference to the deferred object
		var promise;
		try {
			promise = options.action.apply(options.context || this, arguments);

			//if the returned result is *not* a promise, create a new one that is already resolved
			if (!isPromise(promise)) {
				promise = instantDeferred(true, promise, options.context || this).promise();
			}

		} catch (error) {
			promise = instantDeferred(false, error, options.context || this).promise();
		}

		//set up our callbacks
		callbacks.always.forEach(function(callback) {
			promise.then(callback, callback);
		});
		callbacks.fail.forEach(function(callback) {
			promise.then(null, callback);
		});
		callbacks.done.forEach(function(callback) {
			promise.then(callback);
		});

		return promise;
	}
function () {
		//check if we are able to execute
		if (!canExecuteWrapper.call(options.context || this)) {
			//dont attach any global handlers
			return instantDeferred(false, null, options.context || this).promise();
		}

		//notify that we are running and clear any existing error message
		isRunning(true);
		failed(false);
		failMessage('');

		//try to invoke the action and get a reference to the deferred object
		var promise;
		try {
			promise = options.action.apply(options.context || this, arguments);

			//if the returned result is *not* a promise, create a new one that is already resolved
			if (!isPromise(promise)) {
				promise = instantDeferred(true, promise, options.context || this).promise();
			}

		} catch (error) {
			promise = instantDeferred(false, error, options.context || this).promise();
		}

		//set up our callbacks
		callbacks.always.forEach(function(callback) {
			promise.then(callback, callback);
		});
		callbacks.fail.forEach(function(callback) {
			promise.then(null, callback);
		});
		callbacks.done.forEach(function(callback) {
			promise.then(callback);
		});

		return promise;
	}
function ( ) { //check if we are able to execute
 if ( ! canExecuteWrapper . call ( options . context || this ) ) { //dont attach any global handlers
 return instantDeferred ( false , null , options . context || this ) . promise ( ) ; } //notify that we are running and clear any existing error message
 isRunning ( true ) ; failed ( false ) ; failMessage ( '' ) ; //try to invoke the action and get a reference to the deferred object
 var promise ; try { promise = options . action . apply ( options . context || this , arguments ) ; //if the returned result is *not* a promise, create a new one that is already resolved
 if ( ! isPromise ( promise ) ) { promise = instantDeferred ( true , promise , options . context || this ) . promise ( ) ; } } catch ( error ) { promise = instantDeferred ( false , error , options . context || this ) . promise ( ) ; } //set up our callbacks
 callbacks . always . forEach ( function ( callback ) { promise . then ( callback , callback ) ; } ) ; callbacks . fail . forEach ( function ( callback ) { promise . then ( null , callback ) ; } ) ; callbacks . done . forEach ( function ( callback ) { promise . then ( callback ) ; } ) ; return promise ; }
execute function (and return object
execute function ( and return object