Javascript AngularJS V1.1拦截器在末尾总是有$q
在AngularJS关于拦截器的(1.1版)中,拦截器函数都返回如下内容Javascript AngularJS V1.1拦截器在末尾总是有$q,javascript,angularjs,return-value,interceptor,promise,Javascript,Angularjs,Return Value,Interceptor,Promise,在AngularJS关于拦截器的(1.1版)中,拦截器函数都返回如下内容 return response || $q.when(response); 然而,在我的应用程序中,“response”总是被定义的,所以$q.when(response)永远不会被执行。 因此,问题是在什么情况下,“响应”将是未定义的,什么将是未定义的 $q.when(response) // == $q.when(null) 做!因为响应未定义/null? $q.when(承诺)→ 承诺 $q.when(不妥协)→
return response || $q.when(response);
然而,在我的应用程序中,“response”总是被定义的,所以$q.when(response)永远不会被执行。
因此,问题是在什么情况下,“响应”将是未定义的,什么将是未定义的
$q.when(response) // == $q.when(null)
做!因为响应未定义/null?
→ <代码>承诺$q.when(承诺)
→ 新的$q.when(不妥协)
,将异步解析为给定值承诺
非承诺
$q.when
:
$q.when = function (foreignPromise) {
var deferred = $q.defer();
foreignPromise.then(function (data) {
deferred.resolve(data);
$rootScope.$digest();
}, function (reason) {
deferred.reject(reason);
$rootScope.$digest();
});
return deferred.promise;
}
出厂退货$q.when(数据)
正如我们所看到的,收到承诺或不承诺并用
工厂示例:
fessmodule.factory('Data', ['$resource','$q', function($resource, $q) {
var data = [
{
"PreAlertInventory": "5.000000",
"SharesInInventory": "3.000000",
"TotalSharesSold": "2.000000",
"TotalMoneySharesSold": "18.000000",
"TotalSharesBought": "0.000000",
"TotalShareCost": "0.000000",
"EstimatedLosses": "0.000000"
}
];
var factory = {
query: function (selectedSubject) {
return $q.when(data);
}
}
return factory;
}]);
现在我们可以从控制器调用它:
Data.query()
.then(function (result) {
$scope.data = result;
}, function (result) {
alert("Error: No data returned");
});
演示
工厂返回$q.when(数据)|数据
从这个例子中,我们回报承诺。让我们稍微改变一下:
而是返回$q.when(数据)代码>我们将编写:
return $q.when(data) || data;
它也会起作用。但反之亦然
据我所知,Angular知道控制器从数据
服务等待,promise和上述声明将使用1st off$q.when(Data)
演示2
工厂返回数据| |$q.when(数据)
现在让我们通过以下方式调用我们的数据服务:
$scope.data = Data.query();
没有承诺,呼叫是同步的
我们的工厂似乎是:
fessmodule.factory('Data', ['$resource','$q', function($resource, $q) {
var data = [
{
"PreAlertInventory": "5.000000",
"SharesInInventory": "3.000000",
"TotalSharesSold": "2.000000",
"TotalMoneySharesSold": "18.000000",
"TotalSharesBought": "0.000000",
"TotalShareCost": "0.000000",
"EstimatedLosses": "0.000000"
}
];
var factory = {
query: function (selectedSubject) {
return data || $q.when(data);
}
}
return factory;
}]);
演示3
我的结论
返回数据| |$q.when(data)
意味着我们的服务可以返回单个值或承诺。但由于我们知道服务返回的数据类型,因此该语句毫无意义。或数据
或承诺
声明:
return config || $q.when(config);
//AND
return response || $q.when(response);
显示在拦截器的列表中。它已从文档中删除。我认为试图证明拦截器函数可以返回值或承诺是错误的
否则,这些语句毫无意义,因为config
和response
总是有一个引用。代码中的response
是什么,它是承诺还是一些数据?它是来自服务器的响应。在我的拦截器中,我做了类似“response.headers('someProperty')的事情,但是$q.when(null)是什么?因为在像“return response | |$q.when(response)”这样的情况下,只有在响应为“false/undefined/null”时才能执行秒部分。据我所知,它用$q.when
来包装它,以返回错误承诺并输入catch,我同意。考虑到返回值实际上是:“returndata | |$.when(null);”这一事实没有任何意义!是的,也许在1.5年前这是真的