3
|
1 define([ "./Deferred" ], function(Deferred) {
|
0
|
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}
|
7
|
22 * @deprecated use <code>safe.async() + when()</code> instead.
|
0
|
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 }); |