@@ -199,7 +199,7 @@ function qFactory(nextTick, exceptionHandler) {
199
199
var callback ;
200
200
for ( var i = 0 , ii = callbacks . length ; i < ii ; i ++ ) {
201
201
callback = callbacks [ i ] ;
202
- value . then ( callback [ 0 ] , callback [ 1 ] ) ;
202
+ value . then ( callback [ 0 ] , callback [ 1 ] , callback [ 2 ] ) ;
203
203
}
204
204
} ) ;
205
205
}
@@ -212,8 +212,25 @@ function qFactory(nextTick, exceptionHandler) {
212
212
} ,
213
213
214
214
215
+ notify : function ( progress ) {
216
+ if ( pending ) {
217
+ var callbacks = pending ;
218
+
219
+ if ( pending . length ) {
220
+ nextTick ( function ( ) {
221
+ var callback ;
222
+ for ( var i = 0 , ii = callbacks . length ; i < ii ; i ++ ) {
223
+ callback = callbacks [ i ] ;
224
+ callback [ 2 ] ( progress ) ;
225
+ }
226
+ } ) ;
227
+ }
228
+ }
229
+ } ,
230
+
231
+
215
232
promise : {
216
- then : function ( callback , errback ) {
233
+ then : function ( callback , errback , progressback ) {
217
234
var result = defer ( ) ;
218
235
219
236
var wrappedCallback = function ( value ) {
@@ -234,10 +251,18 @@ function qFactory(nextTick, exceptionHandler) {
234
251
}
235
252
} ;
236
253
254
+ var wrappedProgressback = function ( progress ) {
255
+ try {
256
+ result . notify ( ( progressback || defaultCallback ) ( progress ) ) ;
257
+ } catch ( e ) {
258
+ exceptionHandler ( e ) ;
259
+ }
260
+ } ;
261
+
237
262
if ( pending ) {
238
- pending . push ( [ wrappedCallback , wrappedErrback ] ) ;
263
+ pending . push ( [ wrappedCallback , wrappedErrback , wrappedProgressback ] ) ;
239
264
} else {
240
- value . then ( wrappedCallback , wrappedErrback ) ;
265
+ value . then ( wrappedCallback , wrappedErrback , wrappedProgressback ) ;
241
266
}
242
267
243
268
return result . promise ;
@@ -359,7 +384,7 @@ function qFactory(nextTick, exceptionHandler) {
359
384
* @param {* } value Value or a promise
360
385
* @returns {Promise } Returns a promise of the passed value or promise
361
386
*/
362
- var when = function ( value , callback , errback ) {
387
+ var when = function ( value , callback , errback , progressback ) {
363
388
var result = defer ( ) ,
364
389
done ;
365
390
@@ -381,15 +406,26 @@ function qFactory(nextTick, exceptionHandler) {
381
406
}
382
407
} ;
383
408
409
+ var wrappedProgressback = function ( progress ) {
410
+ try {
411
+ return ( progressback || defaultCallback ) ( progress ) ;
412
+ } catch ( e ) {
413
+ exceptionHandler ( e ) ;
414
+ }
415
+ } ;
416
+
384
417
nextTick ( function ( ) {
385
418
ref ( value ) . then ( function ( value ) {
386
419
if ( done ) return ;
387
420
done = true ;
388
- result . resolve ( ref ( value ) . then ( wrappedCallback , wrappedErrback ) ) ;
421
+ result . resolve ( ref ( value ) . then ( wrappedCallback , wrappedErrback , wrappedProgressback ) ) ;
389
422
} , function ( reason ) {
390
423
if ( done ) return ;
391
424
done = true ;
392
425
result . resolve ( wrappedErrback ( reason ) ) ;
426
+ } , function ( progress ) {
427
+ if ( done ) return ;
428
+ result . notify ( wrappedProgressback ( progress ) ) ;
393
429
} ) ;
394
430
} ) ;
395
431
0 commit comments