Angularjs 不确定承诺
我是新来的,也许我不了解承诺的一切,所以。。。 我有一个资源工厂Angularjs 不确定承诺,angularjs,Angularjs,我是新来的,也许我不了解承诺的一切,所以。。。 我有一个资源工厂 .factory('Product',["$resource", function ($resource){ var Resource = $resource( "/api/product/:product_id/", {product_id: '@id'}, { query: { isArray: true,
.factory('Product',["$resource", function ($resource){
var Resource = $resource(
"/api/product/:product_id/",
{product_id: '@id'},
{
query: {
isArray: true,
transformResponse: function (data) {
var items = angular.fromJson(data);
return items.results;
}
},
update: {
method: "PUT",
}
},
{
stripTrailingSlashes: false
}
);
在我的另一家工厂
.factory('Get',["$http", "Product", function ($http, Product){
return {
getDesc: function(id){
var allProducts = Product.query();
var products = [];
for (var i = 0; i < allProducts.length; i++){
if(allProducts[i].desc == id){
products.push(allProducts[i]);
}
}
return products;
}
}
}])
我得到:错误:r.$PROMITE未定义
我不知道为什么。您能帮助我吗?您的代码有一些问题。特别是承诺: query方法返回一个本身包含$promise的资源。因此,您可以执行以下操作之一: 1.返回承诺并在控制器中执行处理和过滤(稍后将详细介绍)。 2.使用。然后在承诺上执行筛选并返回该承诺:
getDesc: function(id){
var allProductsPromise = Product.query().$promise;
return allProductsPromise.then(function(response){
var products = [];
for (var i = 0; i < response.length; i++){
if(response[i].desc == id){
products.push(response[i]);
}
}
return products;
});
}
getDesc:函数(id){
var allProductsPromise=Product.query().$promise;
返回allProductsPromise.then(函数(响应){
var乘积=[];
对于(变量i=0;i
我看到的另一个问题是双重过滤。因为您的查询需要一个id,所以我假设您只获得相关的产品。为什么要过滤结果(迭代并比较id)?如果我的观察是正确的,您可能不需要过滤块,您可以直接返回原始承诺。谢谢您的回答。这种过滤将更加复杂。例如,第一个模型具有另一个模型的foreignKey,我将使用此FK等进行过滤。PS。如果我需要使用这些早期过滤的数据(产品)过滤工厂中的其他数据,该怎么办?基本上,承诺处理程序是链接的,并用作过滤器/转换器。第一个处理程序的返回值传递给下一个处理程序,依此类推。这就是为什么在每个处理程序中返回一个值很重要的原因。也就是说,您可以在append中实现登录(在返回承诺之前)。考虑订购服务。您得到一个基本订单,并且必须添加各种税费和成本:getPrice:function(){return Price.get().then(addcommission).then(addTax).then(addInsurance);}。下一个处理程序(.then(myHandler))将看到合成的价格
getDesc: function(id){
var allProductsPromise = Product.query().$promise;
return allProductsPromise.then(function(response){
var products = [];
for (var i = 0; i < response.length; i++){
if(response[i].desc == id){
products.push(response[i]);
}
}
return products;
});
}