使用 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
可能无法运行,并且你可能会发生内存泄漏