2015-09-25 48 views
0

我想使用Breeze從服務器獲取數據到AngularJS應用程序,並且雖然服務器正在發送JSON數據,但客戶端應用程序是沒有得到它。我使用調試器識別問題的最接近的地方是看到以下函數getRemoteEntities()(它是Factory的一部分)應該返回一個promise,但是在用有效的entityURL和jsonAdapter調用時返回一個空的Object {}:Breeze EntityManager.executeQuery()不返回承諾(或數據?)在AngularJS

[...] 
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。我不明白什麼是不工作。

編輯:刪除.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"} 
      } 
     } 
    } 
})) 

回答

0

jsonAdapter在做什麼?這是一個不尋常的功能(沒有錯,只是不尋常的)。也許你正在做一些內在的事情,吹出承諾。

拿走它,看看你得到什麼。如果你得到了承諾,即使是失敗的承諾,那麼你也會有所作爲。

+0

那麼,'jsonAdapter'的目的是服務器正在服務串行化爲JSON的Smalltalk對象。看起來'jsonAdapter'主要是附加一個'entityType'? (我沒有寫出它們)。我試着將jsonAdapter從等式中拿出來(例如,簡單地說'var query = breeze.EntityQuery.from(entityUrl);'),我現在正在(並可能解決)一個承諾但我無法從管理器獲取實體(可能是因爲'jsonAdapter'已被刪除)。 –