2013-05-16 48 views
0

感覺就像分享這一點,因爲它已經竊聽我幾次,我一直在找錯了區域調試問題 -對象[對象數組]或[Object對象]有沒有一種方法「然後」

我會做這樣的事情 -

var foo = ko.observableArray(); 
datacontext.getFoo(foo, someId) 
    .then(doSomethingElse) 
    .fail(youFail); 

,並在我的數據方面,我會從本地存儲

var getFoo = function (fooObservable, id) { 
     var query = EntityQuery.from('Foozballs') 
      .where('id', '==', id) 
      .orderBy('id'); 

     return manager.executeQueryLocally(query) 
      .then(querySucceeded) 
      .fail(queryFailed); 
    } 

返回的東西,並會不斷地拿回錯誤(S)指出

Object [Object array] has no method 'then' 

請參閱下面的答案爲我認爲造成它,如果有人想改善答案是好的。

回答

1

作爲提到的其他答案,executeQueryLocally是同步的並立即返回。如果您想查詢緩存但仍使其「看起來」異步,最簡單的方法是使用executeQuery方法與FetchStrategy.FromLocalCache。即將您的代碼更改爲

var getFoo = function (fooObservable, id) { 
    var query = EntityQuery.from('Foozballs') 
     .where('id', '==', id) 
     .orderBy('id') 
     .using(FetchStrategy.FromLocalCache); 

    return manager.executeQuery(query) 
     .then(querySucceeded) 
     .fail(queryFailed); 
} 

請注意,這使用executeQuery而不是executeQueryLocally。

+1

感謝您的闡述周杰倫。我爲此奮鬥了很長一段時間,在這裏看到沒有關於具體錯誤的答案,這就是我發佈問題/答案的原因。 –

0

問題是executeQueryLocally是同步完成的,因爲它來自本地存儲,因此當它完成時不能使用'then'。解決回調的正確方法是在本地執行查詢,然後返回

return Q.resolve(); 

在查詢完成時返回回調。

相關問題