Mercurial > pub > ImplabJs
comparison src/implab/guard.js @ 34:27e8e9e38e07 default tip
Слияние
| author | nickolay |
|---|---|
| date | Wed, 05 Jun 2019 20:44:15 +0300 |
| parents | 8af8e840dd49 1dc2fd263b90 |
| children |
comparison
equal
deleted
inserted
replaced
| 33:8af8e840dd49 | 34:27e8e9e38e07 |
|---|---|
| 1 define([ "./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 * @deprecated use <code>safe.async() + when()</code> instead. | |
| 23 */ | |
| 24 return function(o, m, args) { | |
| 25 if (arguments.length == 1) { | |
| 26 m = o; | |
| 27 o = null; | |
| 28 } else if (arguments.length == 2 && o instanceof Function && | |
| 29 m instanceof Array) { | |
| 30 args = m; | |
| 31 m = o; | |
| 32 o = null; | |
| 33 } | |
| 34 | |
| 35 try { | |
| 36 if (!(m instanceof Function)) { | |
| 37 if (o) | |
| 38 m = o[m]; | |
| 39 else if (arguments.length == 1) | |
| 40 return toPromise(m); | |
| 41 else | |
| 42 throw new Error("The target object must be specified"); | |
| 43 } | |
| 44 | |
| 45 if (!m) | |
| 46 throw new Error("Method not found"); | |
| 47 | |
| 48 return toPromise(m.apply(o, args)); | |
| 49 } catch (err) { | |
| 50 var d = new Deferred(); | |
| 51 d.reject(err); | |
| 52 return d; | |
| 53 } | |
| 54 }; | |
| 55 }); |
