可能的微风1.4.8错误? fetchEntityByKey不等待元数据

时间:2014-02-26 19:27:36

标签: breeze

我有以下代码:

        var getUserByGuid = function (guid, entityObservable) {
        return datacontext.manager.user.fetchEntityByKey('User', guid, true)
                        .then(fetchSucceeded)
                        .fail(queryFailed);

        function fetchSucceeded(data) {
            var entity = data.entity;
            if (ko.isWriteableObservable(entityObservable))
                entityObservable(entity);
            return entity;
        }

        function queryFailed(error) {
            logger.error(error);
        }
    };

到此:

        var getUserByGuid = function (guid, entityObservable) {
        if (datacontext.manager.user.metadataStore.isEmpty()) {
            return datacontext.manager.user.metadataStore.fetchMetadata('breeze/user')
                .then(function () {
                    return datacontext.manager.user.fetchEntityByKey('User', guid, true)
                        .then(fetchSucceeded)
                        .fail(queryFailed);
                });
        } else {
            return datacontext.manager.user.fetchEntityByKey('User', guid, true)
                        .then(fetchSucceeded)
                        .fail(queryFailed);
        }

        function fetchSucceeded(data) {
            var entity = data.entity;
            if (ko.isWriteableObservable(entityObservable))
                entityObservable(entity);
            return entity;
        }

        function queryFailed(error) {
            logger.error(error);
        }
    };

请注意额外检查以验证metadataStore已准备好?由于我正在调用fetch,我会假设这个检查会在内部发生,但由于某种原因它不是。

我的代码在下面的“解决方法”中运行良好,但希望将其解决。

1 个答案:

答案 0 :(得分:1)

2014年3月1日更新

从Breeze 1.4.9(或更高版本)开始,现在已经修复了这个问题。

上一篇文章

我认为你是对的。我认为,问题是当你告诉它首先搜索本地缓存时,fetchEntityByKey实际上不必执行提取。但在这种情况下,如果您没有元数据,那么localQuery将失败。我将尝试在下一个版本中修复此问题,可能在本周晚些时候发布。