如何将Q.js与breeze一起使用

如何将Q.js与breeze一起使用,breeze,q,Breeze,Q,这是我第一次尝试使用q.js。它似乎工作,我有数据被检索,然后我的函数被调用。问题是数据没有传递给函数。这是语法问题还是我误用了Q getCategories = function (observable) { var query = breeze.EntityQuery .from("Categories") .orderBy('Order'); Q(executeLocalQuery(query))

这是我第一次尝试使用q.js。它似乎工作,我有数据被检索,然后我的函数被调用。问题是数据没有传递给函数。这是语法问题还是我误用了Q

    getCategories = function (observable) {
        var query = breeze.EntityQuery
            .from("Categories")
            .orderBy('Order');
        Q(executeLocalQuery(query))
            .then(processResult);

        function processResult(data) {  //data = undefined
            if (data.results.length)
                return observable(data.results)
            else
                return observable(create('Item', { CategoryId: id, Name: 'Add12', ImageName: 'icon.png', Order: '999' })); //create add thumbnail if zero records
        };
    },


    executeLocalQuery = function (query) {
        manager.executeQuery(query.using(breeze.FetchStrategy.FromLocalCache))
            .then(localFetchSucceeded)
            .fail(queryFailed);

        function localFetchSucceeded(data) {
            return data;
        }
    },

解决了!在executeLocalQuery时不需要使用Q。在被调用的函数中进行更改。延迟等待data.results,然后解析延迟。然后,将一个承诺返回给调用方。然后调用方可以处理。然后检索数据

    getCategories = function (observable) {
        var query = breeze.EntityQuery
            .from("Categories")
            .orderBy('Order');
        executeLocalQuery(query)
            .then(processResult);

        function processResult(data) {
            if (data.results.length)
                return observable(data.results)
            else {
                var addThumbnail = create('Category', { CategoryId: generateGUID(), Name: 'Add', ImageName: 'icon.png', Order: '999' });
                observable(addThumbnail);
            }
        };
    },



     executeLocalQuery = function (query) {
        var deferred = Q.defer();
        manager.executeQuery(query.using(breeze.FetchStrategy.FromLocalCache))
            .then(localFetchSucceeded)
            .fail(queryFailed);

        function localFetchSucceeded(data) {
            deferred.resolve(data);
        };
        return deferred.promise;
    },