使用 q.defer 延遲操作
我們可以使用 $q
將操作推遲到將來,同時在目前有一個待處理的 promise 物件,通過使用 $q.defer
,我們建立一個將來解決或拒絕的承諾。
這種方法並不等同於使用 $q
建構函式,因為我們使用 $q.defer
來實現一個現有的例程,該例程可能會或可能不會返回(或者曾經返回)一個 promise。
例:
var runAnimation = function(animation, duration) {
var deferred = $q.defer();
try {
...
// run some animation for a given duration
deferred.resolve("done");
} catch (err) {
// in case of error we would want to run the error hander of .then
deferred.reject(err);
}
return deferred.promise;
}
// and then
runAnimation.then(function(status) {}, function(error) {})
-
確保在呼叫
.then
時始終返回deferred.promise
物件或冒錯誤 -
確保你始終解決或拒絕延遲物件,否則
.then
可能無法執行,並且你可能會發生記憶體洩漏