Поток управления JavaScript с несколькими API REST? - PullRequest
0 голосов
/ 28 декабря 2018

Я пишу код 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, собранные по поисковым запросам Google.Я подтверждаю, что каждая функция работает в моем окружении, но не могу понять, как их можно склеить, сохраняя возможность повторного использования каждой функции.Я ценю совет экспертов здесь.

http://codejaw.com/yezime

Например, я могу жестко закодировать следующий шаг в функции REST_deleteFile (), чтобы перейти к REST_uploadFiles (), так как это единственный путь управленияс указанным выше псевдокодом.

Однако, как только я его жестко закодировал, очевидно, я не могу использовать функцию REST_deleteFile () для других целей.Я надеюсь, что есть лучший способ решить эту проблему.

Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Самый простой способ просто пропустить жестко закодированную часть - передать функцию обратного вызова в качестве второго параметра.Таким образом, вы можете сделать функцию более пригодной для повторного использования и делать все, что захотите, когда запрос был успешным.

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))
0 голосов
/ 28 декабря 2018

API-вызовы в JS являются асинхронными, ваша функция REST_checkFileExists ничего не возвращает, значит undefine, поэтому, если блок не будет выполнен.Аналогично для функции REST_createFolder вернется undefine.Опять undefine == 0 это false.
Чтобы этот код работал.Вам нужно изменить структуру функций, используя async / await или Promise chain.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...