AngularJS V1.2 - Error: $q is not a function
AngularJS V1.2 - Error: $q is not a function
(function () {
angular.module('Testing')
.controller('Testing', Testing);
Testing.$inject('$q', '$location', 'authentication');
function Testing($q, $location, authentication) {
var vm = this;
function asyncGreet(name) {
return $q(function (resolve, reject) {
setTimeout(function(){
if(username){
resolve('Hello, ' + username);
}
else {
reject('Greeting ' + name + 'is not allowed');
}
}, 3000)
});
}
var promise = asyncGreet("oo");
promise.then(function (greeting) {
console.log('Success: ' + greeting);
}, function (reason) {
console.log('Failed: ' + reason);
});
} ());
我正在使用 angular 版本 1.2.9,我正在尝试使用 $q,但我一直收到一个错误消息,提示 $q 不是一个函数,。
有人可以指出我做错了什么吗?谢谢你。
如评论中所述,注入存在错误
Testing.$inject('$q', '$location', 'authentication')
应该是
Testing.$inject = ['$q', '$location', 'authentication']
link 到 doc
$q
!== Promise
在你的版本中。我不知道什么时候 $q 变成了一个函数,但我很确定在 1.2.9 之后。您使用这么旧的版本有什么原因吗?
试试这个变体:
var deferred = $q.defer();
setTimeout(function(){
if(username){
deferred.resolve()
} else {
deferred.reject()
}
});
return deferred;
查看适用于您的版本的文档(至少是 1.3 之前的版本)
I am using angular version 1.2.9, and i am trying to make use of $q
, and i keep getting an error that says $q
is not a function, .
错误的发生是因为在AngularJS V1.3中引入了ES6风格的$q
承诺。有关详细信息,请参阅 Github commit - feat($q): add streamlined ES6-style interface for using $q.
我建议使用 $timeout service:
,而不是使用 $q
来制造承诺
function asyncGreet(name) {
̶r̶e̶t̶u̶r̶n̶ ̶$̶q̶(̶f̶u̶n̶c̶t̶i̶o̶n̶ ̶(̶r̶e̶s̶o̶l̶v̶e̶,̶ ̶r̶e̶j̶e̶c̶t̶)̶ ̶{̶
̶s̶e̶t̶T̶i̶m̶e̶o̶u̶t̶(̶f̶u̶n̶c̶t̶i̶o̶n̶(̶)̶{̶
return $timeout(function () {
if(username){
return ('Hello, ' + username);
}
else {
return $q.reject('Greeting ' + name + 'is not allowed');
}
}, 3000);
});
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性 监视等
$timeout
service is AngularJS's wrapper for window.setTimeout. The fn function is wrapped into a try/catch block and delegates any exceptions to $exceptionHandler
service.
调用$timeout
的return值是一个promise,会在延迟时间过去并执行超时函数(如果提供)时执行。
有关详细信息,请参阅 AngularJS $timeout Service API Reference。
(function () {
angular.module('Testing')
.controller('Testing', Testing);
Testing.$inject('$q', '$location', 'authentication');
function Testing($q, $location, authentication) {
var vm = this;
function asyncGreet(name) {
return $q(function (resolve, reject) {
setTimeout(function(){
if(username){
resolve('Hello, ' + username);
}
else {
reject('Greeting ' + name + 'is not allowed');
}
}, 3000)
});
}
var promise = asyncGreet("oo");
promise.then(function (greeting) {
console.log('Success: ' + greeting);
}, function (reason) {
console.log('Failed: ' + reason);
});
} ());
我正在使用 angular 版本 1.2.9,我正在尝试使用 $q,但我一直收到一个错误消息,提示 $q 不是一个函数,。
有人可以指出我做错了什么吗?谢谢你。
如评论中所述,注入存在错误
Testing.$inject('$q', '$location', 'authentication')
应该是
Testing.$inject = ['$q', '$location', 'authentication']
link 到 doc
$q
!== Promise
在你的版本中。我不知道什么时候 $q 变成了一个函数,但我很确定在 1.2.9 之后。您使用这么旧的版本有什么原因吗?
试试这个变体:
var deferred = $q.defer();
setTimeout(function(){
if(username){
deferred.resolve()
} else {
deferred.reject()
}
});
return deferred;
查看适用于您的版本的文档(至少是 1.3 之前的版本)
I am using angular version 1.2.9, and i am trying to make use of
$q
, and i keep getting an error that says$q
is not a function, .
错误的发生是因为在AngularJS V1.3中引入了ES6风格的$q
承诺。有关详细信息,请参阅 Github commit - feat($q): add streamlined ES6-style interface for using $q.
我建议使用 $timeout service:
,而不是使用$q
来制造承诺
function asyncGreet(name) {
̶r̶e̶t̶u̶r̶n̶ ̶$̶q̶(̶f̶u̶n̶c̶t̶i̶o̶n̶ ̶(̶r̶e̶s̶o̶l̶v̶e̶,̶ ̶r̶e̶j̶e̶c̶t̶)̶ ̶{̶
̶s̶e̶t̶T̶i̶m̶e̶o̶u̶t̶(̶f̶u̶n̶c̶t̶i̶o̶n̶(̶)̶{̶
return $timeout(function () {
if(username){
return ('Hello, ' + username);
}
else {
return $q.reject('Greeting ' + name + 'is not allowed');
}
}, 3000);
});
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性 监视等
$timeout
service is AngularJS's wrapper for window.setTimeout. The fn function is wrapped into a try/catch block and delegates any exceptions to $exceptionHandler
service.
调用$timeout
的return值是一个promise,会在延迟时间过去并执行超时函数(如果提供)时执行。
有关详细信息,请参阅 AngularJS $timeout Service API Reference。