javascript - when.all() 2.2.1 in cujojs doesn't reject if one deferred rejected -


i having trouble working out why promise being fulfilled when documentation says should rejected.

open http://jsbin.com/orifok/5/edit , click go button, , alerts "ok" when should alert "fail".

replace when221.all... deferred2.promise.then(stepfulfilled, steprejected); , rejection occurs.

i did make modification when.js code make when221 variable global, rather needing dependency upon require.js library (see http://pastebin.com/j8wcqjwm compared original https://github.com/cujojs/when/blob/2.2.1/when.js).

when.all() documentatation says: if of promises rejected, returned promise rejected rejection reason of first promise rejected - see https://github.com/cujojs/when/blob/master/docs/api.md#whenall

tl;dr: when.all must passed promise, not deferred, , programmer needs careful not make mistake.

brian cavalier answered here: https://github.com/cujojs/when/issues/172 , modified code here: http://jsbin.com/orifok/10/edit

the answer follows:

hi, example code passes deferred objects when.all. deferred objects not promises. unfortunately, libraries, such jquery, , admittedly, earlier versions of when.js, conflate promises , deferred objects. try clarify, i've started referring deferred objects pair {resolver, promise}. should pass promises, not deferred objects, when.all.

here's revised version of example work expect:

(function(){ var deferred1 = when221.defer(); var deferred2 = when221.defer();  window.clickgo = function() {   // pass promise, not deferred   when221.all([deferred1.promise, deferred2.promise]).then(stepfulfilled, steprejected);   deferred2.reject('foooo'); };  function stepfulfilled() {     alert('ok'); }  function steprejected(failed) {     alert('failed ' + failed); }  })(); 

note when,js >= 2.2.0 has new, lighter weight promise creation api when.promise, i've started recommending on when.defer. suited different situations, i've found prefer of time.

hope helps!


Comments

Popular posts from this blog

How to mention the localhost in android -

php - Calling a template part from a post -

c# - String.format() DateTime With Arabic culture -