我正在编写SharePoint代码以创建一个新文件夹并在那里上传多个文件。在伪C代码中,它看起来像这样。
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);
}
以下是我在Google搜索中收集的JavaScript成分。 我确认每个功能都可以在我的环境中工作,但无法弄清楚如何在保持每个功能可重用的同时粘合它们。我感谢专家的建议。
例如,我可以将REST_deleteFile()函数中的下一步硬编码为REST_uploadFiles(),因为这是具有上述伪代码的唯一控制路径。
但是,显然,一旦我对其进行硬编码,就无法使用REST_deleteFile()函数 用于其他目的。我希望有一个更好的方法来解决这个问题。
谢谢您的帮助!
答案 0 :(得分:1)
JS中的api调用是异步的,您的函数REST_checkFileExists
未返回任何内容,意味着undefine
,因此如果块将不执行。同样,对于功能REST_createFolder
,将返回undefine
。同样,undefine == 0
是false
。
为了使此代码起作用。您需要使用async/await或Promise链来更改函数结构。
答案 1 :(得分:1)
忽略硬编码部分的最简单方法是将回调函数作为第二个参数传递。这样,您就可以使函数更具可重用性,并在请求成功后做您想做的任何事情。
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))