【发布时间】:2018-01-24 15:45:35
【问题描述】:
我必须在 Angular 2 环境中使用(大量)现有代码。该代码广泛使用了 AngularJS 1.x 中的$timeout service。与代码中使用的各种其他 AngularJS 1.x 服务相反,我很难找到有关 $timeout 服务的 Angular 2 等效项的信息。
Angular docs 似乎没有提到任何名称中带有timeout-something 的服务。文章Upgrading from AngularJS 确实提到了我面临的情况:
也许您想访问 AngularJS 的内置服务,例如
$location或$timeout。
不幸的是,这篇文章实际上并没有解释如何访问这些特定服务,因为后续示例 HeroesService 假定服务没有 AngularJS 1.x 提供的任何依赖项。
this one 等文章建议使用原生的setTimeout function 也不符合$timeout 服务的功能。
如何在 Angular 2 环境中重现 $timeout 功能?
编辑:正如答案中所指出的那样,使用 Angular 2 时,本机 setTimeout 函数的缺点是不相关的。在这种情况下,如果我有来自 AngularJS 1.x 的完整 $q,我可以大致如下复制$timeout 函数:
function $timeout(fn, delay) {
var result = $q.defer();
setTimeout(function () {
$q.when(fn()).then(function (v) {
result.resolve(v);
});
}, delay);
return result.promise;
}
【问题讨论】:
-
@slacker:
delay运算符似乎返回了Observable,所以我必须摆脱它才能将事情提升到正确的承诺。不过,带有指向计时器的指针的第一个链接看起来很有希望;也许我可以在此基础上制作一个看起来像原始$timeout的包装器。我只是想知道,为什么我在Angular docs 中找不到timer?
标签: javascript angular timeout