Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 不确定承诺_Angularjs - Fatal编程技术网

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;
        });
    }