我只是在学习 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 的字符串的构建顺序,该怎么办?