AngularJS 如何在 Typescript 中使用 $q
AngularJS how to use $q in Typescript
我是 AngularJs 的新手,也是 Typescript 的新手。
我在我的 AngularJs 项目中包含了 Typescript 但无法处理我 return a $q(function(){...})
的服务
我的代码如下所示:
function foo(request, monitor, currentMonitorPropertys) {
var currentChart;
return $q(function (resolve) {
$http(request).success(function (chartResponse) {
...
resolve(monitor);
}).error(function(response){
...
});
});
我使用 VS2013(TypeScript),如果我像上面那样实现此方法,则会出现编译器错误:'IQService' 类型的值不可调用。您是要包括 'new' 吗?
那我怎么用Typescript实现这个功能呢。
谢谢您的回答。
$q
不是功能而是服务。如果你想要延迟,你可以使用下面的代码例如:
var deferred = $q.defer();
$http(request).success(function (chartResponse) {
deferred.resolve(monitor);
}).error(function(response){
deferred.reject(response);
});
// return promise
return deferred.promise;
如果你不做任何其他事情,你可以记住什么,你可以 return $http
调用,因为它本身就是一个承诺:
return $http(request);
有几种方法可以 return 一个承诺... $http
return每个 ajax 调用都是一个承诺,$timeout
也 return这是一个承诺。
话虽这么说,您想 return 通过 $q
基于预定事件($timeout
、$interval
)以外的事情做出承诺,您可以这样做。 ..
// assume $q is injected into your service/controller/factory
// create a defer object
var defer = $q.defer();
// do something...
if (doSomething()){
defer.resolve(); //something went right
else {
defer.reject(); //something went wrong
}
//make sure you return out the promise, so the consumer can act upon it.
return defer.promise;
另外,$q
有一些很好的辅助方法 return 一个 promise 可以在你删除一些逻辑时使用;
// this will a promise that will resolve with the value provided
return $q.when({some: 'result'});
// this will return a promise that will reject with the error specified
return $q.reject('some error message');
因为您正在使用 $http
(已经 returns 一个承诺)为什么不直接返回这个承诺?更简单,更快捷。
function foo(request, monitor, currentMonitorPropertys) {
var currentChart;
return $http(request).then(function (chartResponse) {
//...
return monitor;
});
});
然后在使用此服务时,您可以从那里管理 success
和 error
,这使得实现更简洁:
// for ex. in a controller
foo().then(mySuccessCallback)
.catch(myErrorHandler)
你需要在解析它之前推迟 $q 这是代码试试这个
(function retriveDemoJsonData(){
angular.module('myApp').factory('actionData', function ($q, $http) {
var data={};
data.actionDataJson = function(id){
//The original business logic will apply based on URL Param ID
var defObj = $q.defer();
$http.get('demodata.json')
.then(function(res){
defObj.resolve(res.data[0]);
});
return defObj.promise;
}
return data;
});
})();
------------+
希望对您有所帮助......
我是 AngularJs 的新手,也是 Typescript 的新手。 我在我的 AngularJs 项目中包含了 Typescript 但无法处理我 return a $q(function(){...})
的服务我的代码如下所示:
function foo(request, monitor, currentMonitorPropertys) {
var currentChart;
return $q(function (resolve) {
$http(request).success(function (chartResponse) {
...
resolve(monitor);
}).error(function(response){
...
});
});
我使用 VS2013(TypeScript),如果我像上面那样实现此方法,则会出现编译器错误:'IQService' 类型的值不可调用。您是要包括 'new' 吗?
那我怎么用Typescript实现这个功能呢。 谢谢您的回答。
$q
不是功能而是服务。如果你想要延迟,你可以使用下面的代码例如:
var deferred = $q.defer();
$http(request).success(function (chartResponse) {
deferred.resolve(monitor);
}).error(function(response){
deferred.reject(response);
});
// return promise
return deferred.promise;
如果你不做任何其他事情,你可以记住什么,你可以 return $http
调用,因为它本身就是一个承诺:
return $http(request);
有几种方法可以 return 一个承诺... $http
return每个 ajax 调用都是一个承诺,$timeout
也 return这是一个承诺。
话虽这么说,您想 return 通过 $q
基于预定事件($timeout
、$interval
)以外的事情做出承诺,您可以这样做。 ..
// assume $q is injected into your service/controller/factory
// create a defer object
var defer = $q.defer();
// do something...
if (doSomething()){
defer.resolve(); //something went right
else {
defer.reject(); //something went wrong
}
//make sure you return out the promise, so the consumer can act upon it.
return defer.promise;
另外,$q
有一些很好的辅助方法 return 一个 promise 可以在你删除一些逻辑时使用;
// this will a promise that will resolve with the value provided
return $q.when({some: 'result'});
// this will return a promise that will reject with the error specified
return $q.reject('some error message');
因为您正在使用 $http
(已经 returns 一个承诺)为什么不直接返回这个承诺?更简单,更快捷。
function foo(request, monitor, currentMonitorPropertys) {
var currentChart;
return $http(request).then(function (chartResponse) {
//...
return monitor;
});
});
然后在使用此服务时,您可以从那里管理 success
和 error
,这使得实现更简洁:
// for ex. in a controller
foo().then(mySuccessCallback)
.catch(myErrorHandler)
你需要在解析它之前推迟 $q 这是代码试试这个
(function retriveDemoJsonData(){
angular.module('myApp').factory('actionData', function ($q, $http) {
var data={};
data.actionDataJson = function(id){
//The original business logic will apply based on URL Param ID
var defObj = $q.defer(); $http.get('demodata.json') .then(function(res){ defObj.resolve(res.data[0]); }); return defObj.promise;
}
return data;
});
})();
------------+ 希望对您有所帮助......