我想将 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());
}
不幸的是,上面的代码没有按预期工作——第二次调用不会等待第一个承诺在执行之前得到解决。非常感谢