【问题标题】:jQuery Deferred and promise - Error: Object doesn't support property or method 'then'jQuery Deferred 和 promise - 错误:对象不支持属性或方法 'then'
【发布时间】:2015-03-25 02:02:28
【问题描述】:

我可能在这里遗漏了一些非常基本的东西,但我似乎无法找到错误并且它变得令人沮丧。我只是想从我的开发 SharePoint 网站中提取列表(然后是项目,但每次只做一件事)。

我已经构建了第一个延迟方法,并且控制台日志显示它已完成,但随后我得到“错误:对象不支持属性或方法'then'”,好像 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>

【问题讨论】:

    标签: javascript jquery csom


    【解决方案1】:

    promise 是一个函数,你没有调用它。

    return deferred.promise()
    

    会解决的。

    【讨论】:

    • 谢谢。谢谢你。我知道这是一件很简单的事情,我花了这么长时间才看到它(花了 4 个小时试图通过嵌套的异步调用来做到这一点,然后再进行研究以找到承诺,然后重新开始)。再次感谢您。
    • 是的,追踪起来很棘手,并且错误消息具有误导性(因为它没有告诉您“对象”实际上是一个函数,这会缩小范围)。我建议您熟悉 chrome/firefox 开发工具,因为它们可以帮助您更快地进行调试。
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 2011-02-14
    • 2017-04-07
    • 2014-07-29
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多