gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:48:28 24 4
gpt4 key购买 nike

我有许多函数可以从 SharePoint 列表中读取信息并在 SharePoint 列表中写入信息。这些函数相互依赖,例如,在第一个函数中,我在列表中写入信息。在第一个函数之后,我调用第二个函数来读取写入的信息。

为了读取和写入信息,我使用executeQueryAsync。

我的问题是因为异步数据在第一个函数将其写入列表之前被读取。

当我处理超时时,希望在超时结束时将信息写下来,然后我阅读它们。但这并不是一个很好的解决方案。有没有一种方法可以逐个执行与executeQueryAsync配合使用的函数。

示例:

functionA(); // writes information in list A
functionB(); // reads and write information from list A
functionC(); // reads information from list A

我如何告诉函数互相等待?仅当一个函数完全执行时,下一个函数才会启动。

有人有想法吗?

非常感谢!

最佳答案

根据设计SP.ClientContext.executeQueryAsync function接受两个参数:

  • succeededCallback 要调用的函数或方法的委托(delegate),如果请求成功执行。
  • failedCallback 调用的函数或方法的委托(delegate),如果请求执行失败。

鉴于这一事实,您可以考虑使用以下方法在上一个函数完成后执行下一个函数:

var ctx = SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle('Announcements');
var properties = {'Title' : 'New announcement',
'Body' : 'Welcome to a new site'};

var itemCreateInfo = new SP.ListItemCreationInformation();
var listItem = list.addItem(itemCreateInfo);
for(var name in itemProperties)
listItem.set_item(name, itemProperties[name]);
listItem.update();
ctx.load(listItem);
ctx.executeQueryAsync(
function(){
//execute next function here...
},
function(sender,args){
console.log(args.get_message());
});
<小时/>

或者,您可以考虑通过 Promise 以可链接的方式执行函数,例如使用 jQuery.Deferred如下所示

function executeQueryPromise(ctx, result) {
result = result || {};
var d = jQuery.Deferred();
ctx.executeQueryAsync(function () {
d.resolve(result);
}, function (sender, args) {
d.reject(args);
});
return d.promise();
}

用法

var ctx = SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle('Announcements');

var properties = {'Title' : 'New announcement',
'Body' : 'Welcome to a new site'};
createListItem(list,properties)
.then(function(item){
return readListItems(list);
},logError)
.then(function(items){
console.log("Done");
},logError);

哪里

function logError(sender,args){
console.log(args.get_message());
}

function createListItem(list,itemProperties){
var ctx = list.get_context();
var itemCreateInfo = new SP.ListItemCreationInformation();
var listItem = list.addItem(itemCreateInfo);
for(var name in itemProperties)
listItem.set_item(name, itemProperties[name]);
listItem.update();
ctx.load(listItem);
return executeQueryPromise(ctx,listItem);
}

function readListItems(list){
var ctx = list.get_context();
var listItems = list.getItems(SP.CamlQuery.createAllItemsQuery());
ctx.load(listItems);
return executeQueryPromise(ctx,listItems);
}

关于javascript - SharePoint JavaScript 执行一个又一个异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37614394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com