如何使用微风Q.js

时间:2015-02-12 17:47:05

标签: breeze q

这是我第一次尝试使用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;
        }
    },

1 个答案:

答案 0 :(得分:-1)

解决了!在executeLocalQuery时无需使用Q.更改在被调用函数中。延迟等待data.results并解决延迟。然后将承诺返回给调用者。然后调用者可以处理.then并检索数据。

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