使用多个RESTAPI的JavaScript控制流?
我正在编写一个SharePoint代码来创建一个新文件夹并在那里上载多个文件。在伪C代码中,它看起来是这样的使用多个RESTAPI的JavaScript控制流?,javascript,rest,Javascript,Rest,我正在编写一个SharePoint代码来创建一个新文件夹并在那里上载多个文件。在伪C代码中,它看起来是这样的 String folderName = giveNiceFolderNameBasedOnSomeBusinessLogic(); if(REST_checkfileExists(folderName) { if(confirmDialog("File already exists. Do you want to delete old folder ?") == true)
String folderName = giveNiceFolderNameBasedOnSomeBusinessLogic();
if(REST_checkfileExists(folderName) {
if(confirmDialog("File already exists. Do you want to delete old folder ?") == true) {
REST_deleteFile(folderName)
} else {
return; // Do not overwrite
}
}
if(REST_createFolder(folderName) == 0) {
REST_uploadFiles( folderName, fileListToUpload);
}
下面是我通过谷歌搜索收集的JavaScript成分。
我确认每个函数都能在我的环境中工作,但我不知道如何在保持每个函数可重用的同时粘合它们。我感谢专家们的建议
例如,我可以在REST\u deleteFile()函数中硬编码下一步,转到REST\u uploadFiles(),因为这是上面伪代码的唯一控制路径
但是,一旦我硬编码了它,显然,我就不能使用REST\u deleteFile()函数
为了其他目的。我希望有更好的方法来解决这个问题
提前谢谢你的帮助 JS中的api调用是异步的,您的函数
REST\u checkFileExists
没有返回任何内容意味着undefine
所以if块不会执行。类似地,对于函数REST\u createFolder
将返回undefine
。同样地,undefine==0
是false
以使此代码正常工作。您需要使用或链更改函数结构。JS中的api调用是异步的,您的函数
REST\u checkFileExists
没有返回任何内容意味着取消定义
,因此如果块不执行。类似地,对于函数REST\u createFolder
将返回undefine
。同样地,undefine==0
是false
以使此代码正常工作。您需要使用或链更改函数结构。省略硬编码部分的最简单方法是将回调函数作为第二个参数传递。通过这种方式,您可以使函数更加可重用,并在请求成功时执行您想要的任何操作
function REST_deleteFile(filePathName, onSuccess) {
var siteUrl = _spPageContextInfo.webAbsoluteUrl;
var webRelUrl = _spPageContextInfo.webServerRelativeUrl;
var fullUrl = siteUrl + "/_api/web/GetFileByServerRelativeUrl('" + webRelUrl + filePathName + "')";
$.ajax({
url: fullUrl,
type: "POST",
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "DELETE",
"IF-MATCH": "*"
},
success: onSuccess,
error:function() {
console.log("Fail to delete the file :" + filePathName );
}
});
REST_deleteFile('path/to/file', REST_createFolder(filePathName))
省略硬编码部分的最简单方法是将回调函数作为第二个参数传递。通过这种方式,您可以使函数更加可重用,并在请求成功时执行您想要的任何操作
function REST_deleteFile(filePathName, onSuccess) {
var siteUrl = _spPageContextInfo.webAbsoluteUrl;
var webRelUrl = _spPageContextInfo.webServerRelativeUrl;
var fullUrl = siteUrl + "/_api/web/GetFileByServerRelativeUrl('" + webRelUrl + filePathName + "')";
$.ajax({
url: fullUrl,
type: "POST",
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "DELETE",
"IF-MATCH": "*"
},
success: onSuccess,
error:function() {
console.log("Fail to delete the file :" + filePathName );
}
});
REST_deleteFile('path/to/file', REST_createFolder(filePathName))
请阅读如何使用
fetch()。您可以使用承诺或异步/等待。现在回调通常不那么流行,但这仍然是可能的。谢谢。根据我目前的JavaScript经验,太多的“=>”让我超出了我的舒适区:(但肯定的是,我会将其保留在我的学习列表中,以供重温。请阅读如何使用fetch()
,因为这种方法现在比ajax更标准化。您可以使用Promissions或async/await。现在回调通常不那么流行,但这仍然是可能的。谢谢。根据我目前的JavaScript经验,太多“=>”会让我超出舒适区:(当然,我会把它放在我的学习清单中,让我重温一遍。谢谢!这对我来说很有效,也很容易理解。谢谢!这对我来说很有效,也很容易理解。