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