jQuery Deferred and promise - Error: Object doesn't support property or method 'then'

送分小仙女□ 提交于 2019-12-13 00:38:58

问题


I'm probably missing something really basic here but I can't seem to find the error and it's getting frustrating. I'm just trying to pull the lists (and then items, but one thing at a time here) from my dev SharePoint site.

I've got the first deferred method built and the console log shows that it completes, but then I get "Error: Object doesn't support property or method 'then'" as though jQuery is failing somehow.

For reference I'm trying to follow the method described here: http://www.shillier.com/archive/2013/03/04/using-promises-with-the-javascript-client-object-model-in-sharepoint-2013.aspx

Here's the code:

<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 is a function and you're not calling it.

return deferred.promise()

Will fix that.



来源:https://stackoverflow.com/questions/29246211/jquery-deferred-and-promise-error-object-doesnt-support-property-or-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!