簡體   English   中英

$ .Deferred()和SharePoint 2013 JavaScript CSOM

[英]$.Deferred() and SharePoint 2013 JavaScript 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不再具有() parens。

只是為了踢,這里有一個jsFiddle,它提供了一個你想要做的事情的簡單例子: http//jsfiddle.net/UbBz3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM