Opened 9 years ago
Closed 8 years ago
#11405 closed bug (fixed)
deferred.notify() invokes progressCallbacks with deferred as context
Reported by: | fastfasterfastest | Owned by: | jaubourg |
---|---|---|---|
Priority: | high | Milestone: | 1.9 |
Component: | deferred | Version: | 1.7.1 |
Keywords: | Cc: | jaubourg | |
Blocked by: | Blocking: |
Description
http://api.jquery.com/deferred.promise states: "The deferred.promise() method allows an asynchronous function to prevent other code from interfering with the progress or status of its internal request"
However, deferred.notify() invokes progressCallbacks with the deferred as the context, allowing other code to interfere with the progress or status of the internal request of the deferred object.
http://jsfiddle.net/d92Rp/1/ shows how a progress callback is able to reject a deferred.
Arguably, it would make more sense to invoke the progressCallbacks with the promise of the deferred (deferred.promise()) as the context.
The same perhaps/probably applies to deferred.resolve() and deferred.reject(), although in those cases any calls by the done or fail callbacks to resolve or reject would have no effect.
Change History (6)
comment:1 Changed 9 years ago by
Cc: | jaubourg added |
---|---|
Component: | unfiled → ajax |
Priority: | undecided → low |
comment:2 Changed 9 years ago by
comment:3 Changed 9 years ago by
Owner: | set to jaubourg |
---|---|
Status: | new → assigned |
comment:4 Changed 8 years ago by
Component: | ajax → deferred |
---|
comment:5 Changed 8 years ago by
Milestone: | None → 1.9 |
---|---|
Priority: | low → high |
comment:6 Changed 8 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Deferred: .resolve(), .reject() and .notify() now set the callback context to the promise instance rather than the deferred instance ; .then() has also been amended. Fixes #11405.
Changeset: 23d7cf0488bfeaab51d8f55435cab01f5cf990ca
"Component" should probably be "deferred" (as opposed to "ajax")