Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd0e5c04

Browse files
committed
Deferred: Now 100% Promise/A compliant
1 parentbd15dde commitd0e5c04

File tree

2 files changed

+41
-38
lines changed

2 files changed

+41
-38
lines changed

‎promises-aplus-adapter.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@ require( "jsdom" ).env( "", function (errors, window) {
1111
vardeferred=jQuery.Deferred();
1212

1313
return{
14-
getpromise(){
15-
returndeferred.promise();
16-
},
17-
resolve:deferred.resolve.bind(deferred),
18-
reject:deferred.reject.bind(deferred)
14+
promise:deferred.promise(),
15+
resolve:deferred.resolve,
16+
reject:deferred.reject
1917
};
2018
};
2119
});

‎src/deferred.js

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ define([
44
"./callbacks"
55
],function(jQuery,slice){
66

7-
varstdTypes={
8-
object:true,
9-
function:true
10-
};
7+
varstdTypes=/^(object|function)$/;
118

129
functionstdAttach(object,fnDone,fnFail,fnProgress){
1310
varthen;
@@ -18,7 +15,7 @@ function stdAttach( object, fnDone, fnFail, fnProgress ) {
1815
.fail(fnFail)
1916
.progress(fnProgress);
2017
}
21-
if(stdTypes[typeofobject]){
18+
if(stdTypes.test(typeofobject)){
2219
try{
2320
if(jQuery.isFunction((then=object.then))){
2421
then.call(object,fnDone,fnFail);
@@ -32,20 +29,20 @@ function stdAttach( object, fnDone, fnFail, fnProgress ) {
3229
}
3330
}
3431

35-
functionstdCallback(defer,callback){
32+
functionstdCallback(deferred,callback){
3633
returnjQuery.isFunction(callback)&&function(value){
3734
setTimeout(function(){
3835
varreturned;
3936
try{
4037
returned=callback(value);
41-
if(returned===defer.promise()){
38+
if(returned===deferred.promise()){
4239
thrownewTypeError();
4340
}
4441
}catch(e){
45-
returndefer.reject(e);
42+
returndeferred.reject(e);
4643
}
47-
if(!stdAttach(returned,defer.resolve,defer.reject,defer.notify)){
48-
defer.resolve(returned);
44+
if(!stdAttach(returned,deferred.resolve,deferred.reject,deferred.notify)){
45+
deferred.resolve(returned);
4946
}
5047
});
5148
};
@@ -54,7 +51,7 @@ function stdCallback( defer, callback ) {
5451
jQuery.extend({
5552

5653
Deferred:function(func){
57-
varfinalized,tuples=[
54+
vartuples=[
5855
// action, add listener, listener list, final state
5956
["resolve","done",jQuery.Callbacks("once memory"),"resolved"],
6057
["reject","fail",jQuery.Callbacks("once memory"),"rejected"],
@@ -110,7 +107,34 @@ jQuery.extend({
110107
returnobj!=null ?jQuery.extend(obj,promise) :promise;
111108
}
112109
},
113-
deferred={};
110+
deferred={},
111+
finalizerFactoryFactory=function(){
112+
varfinalized;
113+
returnfunction(i,indirect){
114+
returnfunction(_self,_args){
115+
varfactory,
116+
self=indirect ?_self :this,
117+
args=indirect ?_args :arguments;
118+
if(!finalized){
119+
finalized=(i<2);
120+
finalized=!indirect&&!!(
121+
args&&
122+
args.length===1&&
123+
(factory=finalizerFactoryFactory())&&
124+
stdAttach(args[0],factory(0),factory(1),factory(2))
125+
);
126+
if(!finalized){
127+
tuples[i][2].fireWith(
128+
self===deferred ?promise :self,
129+
args
130+
);
131+
}
132+
}
133+
returnthis;
134+
};
135+
};
136+
},
137+
finalizerFactory=finalizerFactoryFactory();
114138

115139
// Add list-specific methods
116140
jQuery.each(tuples,function(i,tuple){
@@ -130,28 +154,9 @@ jQuery.extend({
130154
},tuples[i^1][2].disable,tuples[2][2].lock);
131155
}
132156

133-
tuple[4]=function(){
134-
if(arguments.length!==1||!stdAttach(
135-
arguments[0],
136-
tuples[0][4],
137-
tuples[1][4],
138-
tuples[2][4])){
139-
list.fireWith(
140-
this===deferred ?promise :this,
141-
arguments
142-
);
143-
}
144-
};
145-
146157
// deferred[ resolve | reject | notify ]
147-
deferred[tuple[0]]=function(){
148-
if(!finalized){
149-
finalized=(i<2);
150-
tuple[4].apply(this,arguments);
151-
}
152-
returnthis;
153-
};
154-
deferred[tuple[0]+"With"]=list.fireWith;
158+
deferred[tuple[0]]=finalizerFactory(i);
159+
deferred[tuple[0]+"With"]=finalizerFactory(i,true);
155160
});
156161

157162
// Make the deferred a promise

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp