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 });