11

我在控制台中收到此错误$q is not defined。当我进行一些研究时,我发现了一些.q library has been deprecated类似 http://www.breezejs.com/documentation/breeze-labs/breezeangularqjs

如果是这样,那么整个 Promise 的概念也被弃用了,

4

2 回答 2

25

Promise 不会被弃用。事实上,它们最近获得了相当大的动力,并包含在 JavaScript 的下一个版本中。

让我们看看他们怎么说:

这个breeze.angular.q 库已被弃用。它被 Breeze Angular 服务所取代,后者更干净地为 Angular 开发配置了微风。

Breeze Angular Service 告诉 Breeze 使用 Angular 的$qPromise 和使用 Angular 的$httpajax 调用。

他们说的是,brief 使用 Angular 自己的 Promise,而不是它自己的使用 Q Promise,Q Promise 比Angular 使用breeze.angular.q的 Promise 更有能力但也更重。$q这只是一个 API 更改。

在 Angular 代码中,您可以$q使用依赖注入来获取 - 例如使用简单的语法:

myApp.controller("MyCtrl",function($q){
    //$q is available here
});

或者,如果您想独立使用它,您可以使用服务位置并$q直接从注入器获取,但这种情况很少见。(如果你想要一个例子 - 让我知道,我宁愿不包含通常表明不良做法的代码)。

于 2014-03-13T13:13:51.240 回答
9
# in your console, try following code
$injector = angular.injector(['ng']);
q = $injector.get('$q');
deferred = q.defer();
# then do whatever you want
于 2014-06-11T08:42:57.693 回答