2015-03-25 52 views
0

我可能錯過了一些真正的基本在這裏,但我似乎無法找到錯誤,它變得令人沮喪。我只是試圖從我的開發SharePoint站點上拉列表(然後項目,但在這裏一次)。jQuery推遲並承諾 - 錯誤:對象不支持屬性或方法'然後'

我已經得到了第一個延遲方法構建和控制檯日誌顯示它完成,但後來我得到「錯誤:對象不支持屬性或方法」,然後'「,好像jQuery失敗了。

僅供參考,我試圖按照這裏介紹的方法:http://www.shillier.com/archive/2013/03/04/using-promises-with-the-javascript-client-object-model-in-sharepoint-2013.aspx

下面的代碼:

<script src="jquery-1.11.2.js"></script> 
<script type="text/javascript"> 

    $(function() { 

     GetSiteLists.bListsGotten().then(
      function (oWebLists) { 
       // Get Lists Succeeded 
       alert('Lists Retrieved'); 
      } 
      , function (sender, args) { 
       // Get Lists Failed 
       alert('Lists Not Retrieved'); 
      } 
     ); 

    }); 

    GetSiteLists = function() { 
     var bListsGotten = function() { 

      var deferred = $.Deferred(); 

      var oContext = new SP.ClientContext.get_current(); 
      console.log('oContext instantiated'); 
      var oWeb = oContext.get_web(); 
      console.log('oWeb instantiated'); 
      this.oWebLists = oWeb.get_lists(); 
      console.log('oWebLists command set'); 
      oContext.load(this.oWebLists); 
      console.log('context load command set'); 
      oContext.executeQueryAsync(
       Function.createDelegate(this, 
        function() { deferred.resolve(this.oWebLists); }), 
       Function.createDelegate(this, 
        function (sender, args) { deferred.reject(sender, args); })); 
      console.log('list retrieval query executed async'); 

      console.log('returning promise'); 
      return deferred.promise; 
     } 

     return { 

      bListsGotten: bListsGotten 
     } 
    }(); 

</script> 

回答

1

promise是一個功能,你不調用它。

return deferred.promise() 

會解決這個問題。

+0

謝謝。謝謝。我知道這很簡單,我花了這麼長的時間纔看到它(花了4個小時試圖通過嵌套的異步調用來做這件事,然後再做研究找到承諾,然後重新開始)。再次謝謝你。 – h0ffm4nn 2015-03-25 02:15:46

+0

是的,追查很難,而且錯誤信息是誤導性的(因爲它沒有告訴你「對象」實際上是一個函數,它將縮小範圍)。我建議您熟悉chrome/firefox開發工具,因爲它們可以幫助您更快地調試這些內容。 – 2015-03-25 03:02:29

相關問題