Mercurial > pub > ImplabJs
comparison 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 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:fc2517695ee1 |
|---|---|
| 1 define([ "dojo/Deferred" ], function(Deferred) { | |
| 2 var toPromise = function(d) { | |
| 3 if (d && d.then) | |
| 4 return d; | |
| 5 var d2 = new Deferred(); | |
| 6 d2.resolve(d); | |
| 7 return d2; | |
| 8 }; | |
| 9 | |
| 10 /** | |
| 11 * функция для асинхронного выполнения метода | |
| 12 * | |
| 13 * @async | |
| 14 * @param{Object} o Объект, который будет использован в качестве | |
| 15 * <code>this</code>, если не указан, будет | |
| 16 * <code>null</code> | |
| 17 * @param{Function|String} m Функция или имя метода, обязательный параметр. | |
| 18 * Если указано имя, тогда параметр <code>o</code> | |
| 19 * также должен быть задан | |
| 20 * @param{Array} args Параметры для вызова метода, не обязательно. | |
| 21 * @returns{dojo/promise} | |
| 22 */ | |
| 23 return function(o, m, args) { | |
| 24 if (arguments.length == 1) { | |
| 25 m = o; | |
| 26 o = null; | |
| 27 } else if (arguments.length == 2 && o instanceof Function && | |
| 28 m instanceof Array) { | |
| 29 args = m; | |
| 30 m = o; | |
| 31 o = null; | |
| 32 } | |
| 33 | |
| 34 try { | |
| 35 if (!(m instanceof Function)) { | |
| 36 if (o) | |
| 37 m = o[m]; | |
| 38 else if (arguments.length == 1) | |
| 39 return toPromise(m); | |
| 40 else | |
| 41 throw new Error("The target object must be specified"); | |
| 42 } | |
| 43 | |
| 44 if (!m) | |
| 45 throw new Error("Method not found"); | |
| 46 | |
| 47 return toPromise(m.apply(o, args)); | |
| 48 } catch (err) { | |
| 49 var d = new Deferred(); | |
| 50 d.reject(err); | |
| 51 return d; | |
| 52 } | |
| 53 }; | |
| 54 }); |
