我有一个由自定义AJS指令使用的常见AJS服务 我需要保留我的指令,直到在服务中解决了一个承诺。 从我所看到的,这是通过指令控制器完成的,但我没有看到除路由之外的任何示例。
在服务承诺解决之前,如何延迟指令?
答案 0 :(得分:0)
我有类似的情况。我的指令必须等待第三方库完成一些DOM操作。我使用重试函数检查每50毫秒,看看我需要的DOM元素是否存在。
在指令中:
Utils.retry(function() { return !!$(selector)[0]; }, 50, 10).then(function() {
doSomethingInterestingWith($(selector));
});
重试功能(我在Utils服务中定义):
var retry = function(fn, interval, maxTries) {
var result, deferred;
deferred = $q.defer();
// if we get a result, return it
result = fn();
if (result !== false) { deferred.resolve(result); }
else {
// if we've run out of tries, return false
if (maxTries) { maxTries -= 1; }
if (maxTries === 0) { deferred.reject('timed out'); }
// otherwise try again after interval
else {
$timeout(function() {
deferred.resolve(retry(fn, interval, maxTries));
}, interval);
}
}
return deferred.promise;
};
Utils.retry = retry;
有关工作示例,请参阅plunk。