UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

150 lines (133 loc) 3.61 kB
// Class: lime.app.Future var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../hxClasses_stub").default; var $hxEnums = require("./../../hxEnums_stub").default; var $import = require("./../../import_stub").default; var $bind = require("./../../bind_stub").default; function lime_app_Promise() {return require("./../../lime/app/Promise");} function haxe_CallStack() {return require("./../../haxe/CallStack");} function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");} // Constructor var Future = function(work,useThreads) { if(useThreads == null) { useThreads = false; } if(work != null) { try { this.value = work(); this.isComplete = true; } catch( e ) { (haxe_CallStack().default).lastException = e; this.error = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e; this.isError = true; } } } // Meta Future.__name__ = "lime.app.Future"; Future.__isInterface__ = false; Future.prototype = { onComplete: function(listener) { if(listener != null) { if(this.isComplete) { listener(this.value); } else if(!this.isError) { if(this.__completeListeners == null) { this.__completeListeners = []; } this.__completeListeners.push(listener); } } return this; }, onError: function(listener) { if(listener != null) { if(this.isError) { listener(this.error); } else if(!this.isComplete) { if(this.__errorListeners == null) { this.__errorListeners = []; } this.__errorListeners.push(listener); } } return this; }, onProgress: function(listener) { if(listener != null) { if(this.__progressListeners == null) { this.__progressListeners = []; } this.__progressListeners.push(listener); } return this; }, ready: function(waitTime) { if(waitTime == null) { waitTime = -1; } return this; }, result: function(waitTime) { if(waitTime == null) { waitTime = -1; } this.ready(waitTime); if(this.isComplete) { return this.value; } else { return null; } }, then: function(next) { if(this.isComplete) { return next(this.value); } else if(this.isError) { var future = new Future(); future.isError = true; future.error = this.error; return future; } else { var promise = new (lime_app_Promise().default)(); this.onError($bind(promise,promise.error)); this.onProgress($bind(promise,promise.progress)); this.onComplete(function(val) { var future1 = next(val); future1.onError($bind(promise,promise.error)); future1.onComplete($bind(promise,promise.complete)); }); return promise.future; } } }; Future.prototype.__class__ = Future.prototype.constructor = $hxClasses["lime.app.Future"] = Future; // Init // Statics Future.ofEvents = function(onComplete,onError,onProgress) { var promise = new (lime_app_Promise().default)(); onComplete.add($bind(promise,promise.complete),true); if(onError != null) { onError.add($bind(promise,promise.error),true); } if(onProgress != null) { onProgress.add($bind(promise,promise.progress),true); } return promise.future; } Future.withError = function(error) { var future = new Future(); future.isError = true; future.error = error; return future; } Future.withValue = function(value) { var future = new Future(); future.isComplete = true; future.value = value; return future; } // Export exports.default = Future;