使用多个RESTAPI的JavaScript控制流?

使用多个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)

我正在编写一个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);
}
下面是我通过谷歌搜索收集的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经验,太多“=>”会让我超出舒适区:(当然,我会把它放在我的学习清单中,让我重温一遍。谢谢!这对我来说很有效,也很容易理解。谢谢!这对我来说很有效,也很容易理解。