37. deferred.then(fnDone[, fnFail[, fnPro]])
分别调用deferred的
.done(), .fail(), .progress()
添加相应回调函数
return this
start
end
version : 1.5.x/1.6.x/1.7.x
创建新Deferred对象
(newDefer)
分别调用deferred的
.done(), .fail(), .progress()
添加相应回调函数
return newDefer.promise()
start
end
version : 1.8.x+
职责:
1、执⾏行回掉函数
2、改变新的Deferred对象的状态
3、返回新的Deferred对象
38. deferred.then/pipe
分别调用deferred的
.done(), .fail(), .progress()
添加相应回调函数
return this
start
end
version : 1.5.x/1.6.x/1.7.x
then
创建新Deferred
对象
(newDefer)
分别调用deferred的
.done(), .fail(), .progress()
添加相应回调函数
return
newDefer.promise()
start
end
version : 1.6.x/1.7.x
pipe
创建新Deferred
对象
(newDefer)
分别调用deferred的
.done(), .fail(), .progress()
添加相应回调函数
return
newDefer.promise()
start
end
version : 1.8.x+
then
39.
40. d1
done function
fail function
state “pending”
… …
doneList Array
failList Array
doneList
0 changeState
1 failList.disable
2 progress.lock
donList和failList实际上不是d1的属性,只是一个局部变量,
为了演示方便,加入到d1
41. d1
done function
fail function
state “pending”
… …
doneList Array
failList Array
doneList
0 changeState
1 failList.disable
2 progress.lock
3 function
doneList
0 changeState
1 doneList.disable
2 progress.lock
d2
done function
fail function
then function
… …
doneList Array
failList Array
f1
f2
f3
failList
0 changeState
1 failList.disable
2 progress.lock
42. d1
done function
then function
state “pending”
… …
doneList Array
failList Array
doneList
0 changeState
1 failList.disable
2 progress.lock
3 function
doneList
0 changeState
1 doneList.disable
2 progress.lock
d2
done function
fail function
then function
… …
doneList Array
failList Array
f1
f2
f3
failList
0 changeState
1 failList.disable
2 progress.lock
start
call fn & get result
(returned)
isPromise
(returned)
end
returned.promise()
.then(…)
newDefer[resolve
With|rejectWith|
progressWith]
Y
N
43. d1
done function
fail function
then function
… …
doneList Array
failList Array
doneList
0 changeState
1 failList.disable
2 progress.lock
3 function
doneList
0 changeState
1 doneList.disable
2 progress.lock
3 function
d2
done function
fail function
then function
… …
doneList Array
failList Array
f1
f2
f3
failList
0 changeState
1 failList.disable
2 progress.lock
3 function
44. d1
done function
then function
state “resolved”
… …
doneList Array
failList Array
doneList
0 changeState
1 failList.disable
2 progress.lock
3 function
doneList
0 changeState
1 doneList.disable
2 progress.lock
3 function
d2
done function
fail function
then function
… …
doneList Array
failList Array
f1
f2
f3
failList
0 changeState
1 failList.disable
2 progress.lock
3 function
isPromise(returned = d) == true
d.then(d2.resolve, d2.reject)
d2.reject()
// TODO ….
:)
45. d1
done function
fail function
then function
… …
doneList Array
failList Array
failList
0 changeState
1 doneList.disable
2 progress.lock
3 undefined
doneList
0 changeState
1 doneList.disable
2 progress.lock
3 function
d2
done function
fail function
then function
… …
doneList Array
failList Array
f1
f2
f3
faiList
0 changeState
1 failList.disable
2 progress.lock
3 function
returned = fnFail && returned
returned == false
d2.rejectWith()
var deferred = $.Deferred();
deferred.then(function(res){
console.warn('ok 1');
},function(err){
console.warn('err 1');
})
.then(function(res){
console.warn('ok 2');
},function(err){
console.warn('err 2');
})
.then(function(res){
console.warn('ok 3');
},function(err){
console.warn('err 3');
});
deferred.reject();
p(deferred)