Поток управления JavaScript с несколькими REST API?

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Прочтите, как использовать fetch(), поскольку этот метод теперь более стандартизирован, чем ajax. developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fet‌ ch Вы можете использовать обещания или async / await. В наши дни обратные вызовы, как правило, не так популярны, но это все еще возможно.

sunapi386 28.12.2018 09:52

Спасибо. С моим текущим опытом работы с JavaScript слишком много "=>" выводят меня за пределы моей зоны комфорта :( Но определенно я сохраняю это в своем списке для изучения, чтобы вернуться к нему.

Tony 28.12.2018 19:36
Ответ принят как подходящий

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

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.info("Fail to delete the file :" + filePathName );
        }
    });


REST_deleteFile('path/to/file', REST_createFolder(filePathName))

Спасибо ! Это работает, и мне это достаточно легко понять.

Tony 28.12.2018 19:33

Другие вопросы по теме