Mercurial > pub > ImplabJs
comparison src/implab/safe.js @ 7:9c0943c68a90
minor fixes
added safe.async(fn, thisArg)
author | cin |
---|---|
date | Tue, 20 Jun 2017 19:45:15 +0300 |
parents | 00779cb63b12 |
children | f0035923ff3e |
comparison
equal
deleted
inserted
replaced
6:9663631cbdb9 | 7:9c0943c68a90 |
---|---|
134 dest[tmpl[p]] = src[p]; | 134 dest[tmpl[p]] = src[p]; |
135 } | 135 } |
136 } | 136 } |
137 } | 137 } |
138 return dest; | 138 return dest; |
139 }, | |
140 | |
141 /** Wraps the specified function to emulate an asynchronous execution. | |
142 * @param{Object} thisArg [Optional] Object which will be passed as 'this' to the function. | |
143 * @param{Function|String} fn [Required] Function wich will be wrapped. | |
144 */ | |
145 async: function (fn, thisArg) { | |
146 if (arguments.length == 2) | |
147 fn = thisArg[fn]; | |
148 | |
149 if (fn == null) | |
150 throw new Error("The function must be specified"); | |
151 | |
152 function wrapresult(x, e) { | |
153 if (e) { | |
154 return { | |
155 then: function (cb, eb) { | |
156 try { | |
157 return eb ? wrapresult(eb(e)) : this; | |
158 } catch (e2) { | |
159 return wrapresult(null, e2); | |
160 } | |
161 } | |
162 }; | |
163 } else { | |
164 if (x && x.then) | |
165 return x; | |
166 return { | |
167 then : function(cb) { | |
168 try { | |
169 return cb ? wrapresult(cb(x)) : this; | |
170 } catch(e2) { | |
171 return wrapresult(e2); | |
172 } | |
173 } | |
174 }; | |
175 } | |
176 } | |
177 | |
178 return /** @this */ function () { | |
179 try { | |
180 return wrapresult(fn.apply(this, arguments)); | |
181 } catch (e) { | |
182 return wrapresult(null, e); | |
183 } | |
184 }; | |
139 }, | 185 }, |
140 | 186 |
141 create: function () { | 187 create: function () { |
142 if (console && console.warn) | 188 if (console && console.warn) |
143 console.warn("implab/safe::create is deprecated use Object.create instead"); | 189 console.warn("implab/safe::create is deprecated use Object.create instead"); |