在 Angular 2 环境中,我必须使用(大量的)现有代码。那段代码广泛使用了 AngularJS 1.x 的 $timeout
服务。与代码中使用的其他各种 AngularJS 1.x 服务不同,我很难找到 $timeout
服务的 Angular 2 等效信息。
Angular 文档似乎没有提到名称中带有 timeout
的服务。文章 从 AngularJS 升级确实提到了我面对的情况:
也许您想要访问 AngularJS 的内置服务,如
$location
或$timeout
。
不幸的是,该文章并没有真正解释如何访问这些特殊的服务,因为随后的示例 HeroesService
假定了一个由 AngularJS 1.x 提供的没有任何依赖项的服务。
诸如这样的文章表明,使用原生的 setTimeout
函数无法满足 $timeout
服务的能力。
我该如何在 Angular 2 环境中复制 $timeout
的功能?
编辑:正如答案中所指出的那样,使用本机的 setTimeout
函数的缺点在使用 Angular 2 时并不相关。在这种情况下,如果我有完整的来自 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;
}
delay
操作符似乎返回一个Observable
,所以我需要摆脱它,将事情恢复到适当的 Promise。第一个链接指向计时器,看起来很有前途;也许我可以根据那个创建一个类似于原始$timeout
的包装器。我只是想知道,为什么在 Angular 文档 中找不到timer
。 - O. R. Mapper