javascript - $.Deferred() 和 SharePoint 2013 JavaScript CSOM

标签 javascript sharepoint csom

我想将 jQuery $.Deferred/promise 功能与 SharePoint JavaScript API 结合使用。 这是我要实现的目标的示例。

function getCachedSearches() {
    var dfd = $.Deferred(function () {
        var list = context
                .get_web()
                .get_lists()
                .getByTitle('CachedSearches');

        cached_searches = list.getItems('');

        context.load(cached_searches);

        context.executeQueryAsync(
           function () {
               dfd.resolve();
           },
           function (sender, args) {
               dfd.reject(args.get_message());
           }
        );
    });
    return dfd.promise();
}

function addCachedSearch(phrase) {
    var dfd = $.Deferred(function () {
        var list = context
                .get_web()
                .get_lists()
                .getByTitle('CachedSearches');

        var create_item = new SP.ListItemCreationInformation();
        var list_item = list.addItem(create_item);

        list_item.set_item('Title', phrase);

        list_item.update();

        context.load(list_item);

        context.executeQueryAsync(
           function () {
               dfd.resolve();
           },
           function (sender, args) {
               dfd.reject(args.get_message());
           }
        );
    });
    return dfd.promise();
}

function doSearch() {
    addCachedSearch($('#phrase').val())
        .then(getCachedSearches());
}

不幸的是,上面的代码没有按预期工作——第二个调用在执行之前没有等待第一个 promise 被解决。 非常感谢

最佳答案

我想我发现了一个问题:.then() 需要一个函数引用,但您正在调用该函数并传入结果(在本例中为 Promise)。试试这个:

function doSearch() {
    addCachedSearch($('#phrase').val())
        .then(getCachedSearches);
}

请注意,getCachedSearches 不再有 () 括号。

只是为了好玩,这里有一个 jsFiddle,其中包含您正在尝试做的事情的提炼示例:http://jsfiddle.net/UbBz3/

关于javascript - $.Deferred() 和 SharePoint 2013 JavaScript CSOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102885/

相关文章:

c# - 注册 SPO 中心站点 CSOM

网站上不存在 Sharepoint 列表,但在调试时它存在于我的代码中

javascript - Node.js 和 Express : How to create many app. 通过 "for loop"与 Express.js 进行调用?

javascript - ActiveXObject 行数计数器

c# - Excel 服务无法打开工作簿

javascript - SharePoint JavaScript 执行一个又一个异步函数

javascript - 在 drupal 中单击没有灯箱的画廊(多个 cck 图像)

javascript - 忽略搜索 javascript 中的大小写

javascript - 如何在 JSOM 中使用 ClientPeoplePicker

c# - 在 SharePoint 2013 中以编程方式创建文件夹