Breeze EntityManager.executeQuery()没有在AngularJS中返回promise(或数据?)

时间:2015-09-25 18:44:31

标签: angularjs breeze

我正在尝试使用Breeze将服务器中的数据导入AngularJS应用程序,虽然服务器正在发送JSON数据,但客户端应用程序却没有获取它。我最接近使用调试器识别问题的方法是看到以下函数getRemoteEntities()(它是Factory的一部分)应该返回一个promise但是在调用时返回一个空的Object {}一个有效的entityURL和jsonAdapter:

[...]
var manager = entityManagerFactory.newManager();
[...]
return { 
    getRemoteEntities: function (entityUrl, jsonAdapter) {

        var query = breeze.EntityQuery
            .from(entityUrl)
            .using(jsonAdapter);

        return manager.executeQuery(query)
            .then(function (results) {
                return results;
            })
            .catch(function (error) {
                return $q.reject(error);
        });
    }
}

我已经检查过,代码确实使用了here所述的Breeze Angular Service。我不明白什么不起作用。

编辑:删除.using(jsonAdapter)意味着我能够获得并解决承诺,暗示它可能正在做一些混乱的事情。这是一个例子(它们都遵循这种模式):

.value('jsonProfileResultsAdapter', new breeze.JsonResultsAdapter({

    name: "xyz", // mild obfuscation

    extractResults: function (data) {
        var results = data.results;
        if (!results) throw new Error("Unable to resolve 'results' property");
        return results;
    },

    visitNode: function (node, parseContext, nodeContext) {

        if (node) {
            if (node.person && node.assignments) {
                return {entityType: "EmployeeModel"}
            }
        }
    }
}))

1 个答案:

答案 0 :(得分:0)

jsonAdapter在做什么?这是一个不寻常的功能(没错,只是不寻常)。也许你在其中做了一些事情,这会破坏你的承诺。

把它带走,看看你得到了什么。如果你得到了承诺,即使是失败的承诺,那么你还要做些什么。