-1

This is my first attempt at using q.js. It appears to work, I have data being retrieved and then my function is called. The problem is the data is not being passed to the function. Is it a syntax problem or am I misusing 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;
        }
    },
user1068557
  • 309
  • 2
  • 8

1 Answers1

-1

Solved it! No need to use Q when at executeLocalQuery. Changes are in the called function. Deferred waits for data.results and the resolves the defer. Then a promise is returned back to the caller. The caller can then process the .then and retrieve the data.

    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;
    },
user1068557
  • 309
  • 2
  • 8