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