Mercurial > pub > ImplabJs
view src/implab/guard.js @ 0:fc2517695ee1
Initial commit, draft import of existing work
author | cin |
---|---|
date | Thu, 01 Jun 2017 13:20:03 +0300 |
parents | |
children | 00779cb63b12 |
line wrap: on
line source
define([ "dojo/Deferred" ], function(Deferred) { var toPromise = function(d) { if (d && d.then) return d; var d2 = new Deferred(); d2.resolve(d); return d2; }; /** * функция для асинхронного выполнения метода * * @async * @param{Object} o Объект, который будет использован в качестве * <code>this</code>, если не указан, будет * <code>null</code> * @param{Function|String} m Функция или имя метода, обязательный параметр. * Если указано имя, тогда параметр <code>o</code> * также должен быть задан * @param{Array} args Параметры для вызова метода, не обязательно. * @returns{dojo/promise} */ return function(o, m, args) { if (arguments.length == 1) { m = o; o = null; } else if (arguments.length == 2 && o instanceof Function && m instanceof Array) { args = m; m = o; o = null; } try { if (!(m instanceof Function)) { if (o) m = o[m]; else if (arguments.length == 1) return toPromise(m); else throw new Error("The target object must be specified"); } if (!m) throw new Error("Method not found"); return toPromise(m.apply(o, args)); } catch (err) { var d = new Deferred(); d.reject(err); return d; } }; });