@@ -189,8 +189,8 @@ function $QProvider() {
189
189
function qFactory ( nextTick , exceptionHandler ) {
190
190
191
191
192
- function callOnce ( elements ) {
193
- var called = false , result = [ ] ;
192
+ function callOnce ( resolveFn , rejectFn ) {
193
+ var called = false ;
194
194
function wrap ( fn ) {
195
195
return function ( value ) {
196
196
if ( called ) return ;
@@ -199,10 +199,7 @@ function qFactory(nextTick, exceptionHandler) {
199
199
} ;
200
200
}
201
201
202
- for ( var i = 0 ; i < elements . length ; ++ i ) {
203
- result . push ( wrap ( elements [ i ] ) ) ;
204
- }
205
- return result ;
202
+ return [ wrap ( resolveFn ) , wrap ( rejectFn ) ] ;
206
203
}
207
204
208
205
/**
@@ -222,13 +219,25 @@ function qFactory(nextTick, exceptionHandler) {
222
219
processScheduled = false ;
223
220
224
221
function processQueue ( ) {
225
- var fn ;
222
+ var fn , promise ;
226
223
227
224
processScheduled = false ;
228
225
if ( ! status ) return ;
229
226
for ( var i = 0 ; i < pending . length ; ++ i ) {
230
- fn = pending [ i ] [ status - 1 ] ;
231
- fn ( value ) ;
227
+ promise = pending [ i ] [ 0 ] ;
228
+ fn = pending [ i ] [ status ] ;
229
+ try {
230
+ if ( isFunction ( fn ) ) {
231
+ promise . resolve ( fn ( value ) ) ;
232
+ } else if ( status === 1 ) {
233
+ promise . resolve ( value ) ;
234
+ } else {
235
+ promise . reject ( value ) ;
236
+ }
237
+ } catch ( e ) {
238
+ promise . reject ( e ) ;
239
+ exceptionHandler ( e ) ;
240
+ }
232
241
}
233
242
pending = [ ] ;
234
243
}
@@ -243,11 +252,11 @@ function qFactory(nextTick, exceptionHandler) {
243
252
var then , fns ;
244
253
245
254
if ( status ) return ;
246
- fns = callOnce ( [ resolve , reject ] ) ;
247
255
if ( val === deferred . promise ) throw new TypeError ( 'Cycle detected' ) ;
256
+ fns = callOnce ( resolve , reject ) ;
248
257
try {
249
- then = val && val . then ;
250
- if ( ( isObject ( val ) || isFunction ( val ) ) && isFunction ( then ) ) {
258
+ if ( ( isObject ( val ) || isFunction ( val ) ) ) then = val && val . then ;
259
+ if ( isFunction ( then ) ) {
251
260
then . call ( val , fns [ 0 ] , fns [ 1 ] , deferred . notify ) ;
252
261
} else {
253
262
value = val ;
@@ -269,37 +278,10 @@ function qFactory(nextTick, exceptionHandler) {
269
278
270
279
deferred = {
271
280
promise : {
272
- then : function ( onFulfilled , onRejected , progressback ) {
281
+ then : function ( onFulfilled , onRejected , progressBack ) {
273
282
var result = defer ( ) ;
274
- pending . push ( [
275
- function ( val ) {
276
- try {
277
- result . resolve ( isFunction ( onFulfilled ) ? onFulfilled ( val ) : val ) ;
278
- } catch ( e ) {
279
- result . reject ( e ) ;
280
- exceptionHandler ( e ) ;
281
- }
282
- } ,
283
- function ( reason ) {
284
- try {
285
- if ( isFunction ( onRejected ) ) {
286
- result . resolve ( onRejected ( reason ) ) ;
287
- } else {
288
- result . reject ( reason ) ;
289
- }
290
- } catch ( e ) {
291
- result . reject ( e ) ;
292
- exceptionHandler ( e ) ;
293
- }
294
- } ,
295
- function ( progress ) {
296
- try {
297
- result . notify ( isFunction ( progressback ) ? progressback ( progress ) : progress ) ;
298
- } catch ( e ) {
299
- exceptionHandler ( e ) ;
300
- }
301
- }
302
- ] ) ;
283
+
284
+ pending . push ( [ result , onFulfilled , onRejected , progressBack ] ) ;
303
285
if ( status ) scheduleProcessQueue ( ) ;
304
286
305
287
return result . promise ;
@@ -309,7 +291,7 @@ function qFactory(nextTick, exceptionHandler) {
309
291
return deferred . promise . then ( null , callback ) ;
310
292
} ,
311
293
312
- "finally" : function ( callback , progressback ) {
294
+ "finally" : function ( callback , progressBack ) {
313
295
function makePromise ( value , resolved ) {
314
296
var result = defer ( ) ;
315
297
if ( resolved ) {
@@ -342,7 +324,7 @@ function qFactory(nextTick, exceptionHandler) {
342
324
return handleCallback ( value , true ) ;
343
325
} , function ( error ) {
344
326
return handleCallback ( error , false ) ;
345
- } , progressback ) ;
327
+ } , progressBack ) ;
346
328
}
347
329
} ,
348
330
resolve : resolve ,
@@ -352,10 +334,15 @@ function qFactory(nextTick, exceptionHandler) {
352
334
353
335
if ( ! status && callbacks . length ) {
354
336
nextTick ( function ( ) {
355
- var callback ;
337
+ var callback , result ;
356
338
for ( var i = 0 , ii = callbacks . length ; i < ii ; i ++ ) {
357
- callback = callbacks [ i ] [ 2 ] ;
358
- callback ( progress ) ;
339
+ result = callbacks [ i ] [ 0 ] ;
340
+ callback = callbacks [ i ] [ 3 ] ;
341
+ try {
342
+ result . notify ( isFunction ( callback ) ? callback ( progress ) : progress ) ;
343
+ } catch ( e ) {
344
+ exceptionHandler ( e ) ;
345
+ }
359
346
}
360
347
} ) ;
361
348
}
@@ -418,10 +405,10 @@ function qFactory(nextTick, exceptionHandler) {
418
405
* @param {* } value Value or a promise
419
406
* @returns {Promise } Returns a promise of the passed value or promise
420
407
*/
421
- var when = function ( value , callback , errback , progressback ) {
408
+ var when = function ( value , callback , errback , progressBack ) {
422
409
var result = defer ( ) ;
423
410
result . resolve ( value ) ;
424
- return result . promise . then ( callback , errback , progressback ) ;
411
+ return result . promise . then ( callback , errback , progressBack ) ;
425
412
} ;
426
413
427
414
/**
0 commit comments