私はJavaScriptを学んでいるところですが、JavaScriptが関数を非同期的に処理する方法については、私のような人々にとって多くの情報があるようです。
私はまだこれに頭を悩ませようとしていますが、私がやろうとしていることのために、SharePointの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を渡すとどうなりますか。
ただし、文字列をDOMに追加する前に順番に作成したいと思いbuildMarkUp
ます(そうそう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();
}
これは私がこれに本当に苦労しているところです。
別のコールバックは、私が正しく戻った場合、データを使用して元の関数に戻らないことを意味しますか?
元の関数は処理を継続し、ネストされた関数を起動するだけですか?
いつ/どのように/どの値が元の関数に返されるかをどのように制御できますか?できますか?
基本的に、参照されている各プロジェクト行に他のSharePointリストからのデータが含まれているテーブルを作成しようとしていて、DOMに追加する文字列が作成される順序を制御する必要がある場合はどうなりますか?