gpt4 book ai didi

javascript:在函数完成处理之前执行函数的顺序 - 嵌套函数返回值?

转载 作者:行者123 更新时间:2023-12-02 19:02:30 24 4
gpt4 key购买 nike

我刚刚学习 JavaScript,对于像我这样的人来说,似乎有很多关于它异步处理函数的方式的信息。

虽然我仍在努力解决这个问题,但由于我正在尝试做的事情,我发现自己在某些共享点 csom 上苦苦挣扎。也许我的做法完全错误,但正如我所说,只是学习。

尝试使用 SP CSOM 获取这样的列表数据:

getGridData() {
var gridURL = "https://mySite/ListData.svc/Projects";
var request = new Sys.Net.WebRequest();
request.set_httpVerb("GET");
request.set_url(gridURL);
request.get_headers()["Accept"] = "application/json";
request.add_completed(onCompletedProjectCallback);
request.invoke();
}

onCompletedProjectCallback(response, eventArgs) {
var getProject = eval("(" + response.get_responseData() + ")");
var buildMarkUp = '';
for (var i = 0; i < getProject.d.results.length; i++) {
buildMarkUp += "<div>" + getProject.d.results[i].ProjectName + "</div>";
}
}

这很好用。

我确实了解其他方法,例如 spservices,但我喜欢这个,因为它对我来说似乎更快,并且返回更可取的 JSON。

当我想使用上面的 ProjectID 来调用另一个函数并传递 id 以便从列表中获取相关值时,会发生什么情况。

但是,我想在将 buildMarkUp 字符串附加到 DOM 之前按顺序构建它(哦,是的 jQuery 顺便说一句)。这样的事情可能是完全错误的,但这正是我试图做的:

onCompletedProjectCallback(response, eventArgs) {
var getProject = eval("(" + response.get_responseData() + ")");
var buildMarkUp = '';
for (var i = 0; i < getProject.d.results.length; i++) {
buildMarkUp += "<div>" + getProject.d.results[i].ProjectName + "</div>";

//call nested function here so that I can go retrieve values for each ProjectID from another list
var getOtherData = getRelatedData(getProject.d.results[i].ProjectID);
}
}


getRelatedData(passedProjectID) {
// have to use the same method as the original to get more sharepoint list data
var relatedURL = "https://mySite/ListData.svc/Related$filter=ProjectID eq " + passedProjectID;
var request = new Sys.Net.WebRequest();
request.set_httpVerb("GET");
request.set_url(relatedURL);
request.get_headers()["Accept"] = "application/json";
request.add_completed(onCompletedRelatedCallback);
request.invoke();
}

这就是我真正陷入困境的地方。

单独的回调意味着如果我正确返回,它不会返回到带有数据的原始函数?
原始函数是否继续处理并仅触发嵌套函数?
那么我如何控制何时/如何/什么值返回到原始函数?我可以吗?

基本上,如果我尝试构建一个表,其中每个引用的项目行都包含来自其他共享点列表的数据,并且我需要控制要附加到 DOM 的字符串的构建顺序,该怎么办?

最佳答案

您是正确的,执行 Web 请求的函数会立即继续,并且无法从该调用返回数据。您需要对回调进行编码,以将它们收集的数据添加到公共(public)数据结构中——也许创建一个将数据累积为新属性的对象。当您收集完所有数据后,最后一个回调可以构建 HTML 元素。如果您同时执行多个 AJAX 请求,则每个回调都可以调用一个通用函数来查看所有请求是否已完成。例如:

function checkLoadingComplete() {
if (loadedData.project && loadedData.relatedData && loadedData.summaryData) {
//now build the HTML elements
}
}

关于javascript:在函数完成处理之前执行函数的顺序 - 嵌套函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14648088/

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