Как использовать возвращаемое значение функции JavaScript для проверки в другой функции [дубликат] ⇐ Jquery
-
Anonymous
Как использовать возвращаемое значение функции JavaScript для проверки в другой функции [дубликат]
У меня есть одна функция, которая вызывается onSubmit формы и проверяет, имеет ли изображение, которое я хочу загрузить, необходимое соотношение. Если изображение имеет соотношение сторон, оно допускает обработку. В противном случае этого не произойдет. Проблема возникает, когда моя функция hasRatio длится несколько секунд, я получаю «не определено» вместо «ИСТИНА» или «ЛЮБОЕ СООБЩЕНИЕ». Я пытался использовать PROMISE, но не знаю, как с этим справиться. Подскажите, пожалуйста, что не так с моим кодом?
Вот мои функции:
$('.form-assync').submit(function (e) { е.preventDefault(); пусть $e = $(это); пусть $formClasses = $e.attr('класс'); пусть $x = $formClasses.split(' '); if ($x.indexOf('wait') !== -1) { //Отображение ошибки здесь } еще { let $image = document.getElementById("изображение"); if (($image != null && $image.files.length !== 0)) { //специальная проверка изображений с соотношением сторон let $imageClasses = $('#image').attr('class'); пусть $allowProcessing = false; if ($imageClasses.indexOf('with-ratio') !== -1) { //проверяем, имеет ли изображение необходимое соотношение пусть проверка = async () => { $allowProcessing = ждут hasRatioOne(); вернуть $allowProcessing; } проверка().then(функция (текст) { $allowProcessing = текст; //возвращаем TRUE или любое сообщение об ошибке }); } еще { $allowProcessing = правда; } //Обрабатывать или нет if ($allowProcessing !== true) { Оповещение ($allowProcessing); вернуть ложь; //остановим отправку формы } //Здесь делаем вызов AJAX с индикатором выполнения } еще { //Выполняем вызов AJAX без индикатора выполнения } вернуть ложь; } }); функция hasRatioOne() { вернуть новое обещание (функция (решить) { /* Здесь я буду выполнять задачи, чтобы проверить, имеет ли изображение соотношение и задачи длятся несколько секунд */ let $error = "У вашего изображения нет соотношения сторон"; setTimeout(функция () { разрешить ($ ошибка); }, 1000); }); } функция hasRatioTwo(){ вернуть истину; //функция вообще не длится долго } Я также пытался использовать обратный вызов, но результат всегда приходит после всплывающего оповещения
функция hasRatioThree(обратный вызов){ let $error = "У вашего изображения нет соотношения сторон"; setTimeout(функция () { обратный вызов ($ ошибка); }, 1000); } hasRatioThree (функция (результат) { разрешитьОбработка = результат; }); Как видите, если я использую «hasRatioTwo», у меня нет проблем, но когда я использую «hasRatioOne», у меня появляется «неопределенное».
Заранее благодарим за помощь.
У меня есть одна функция, которая вызывается onSubmit формы и проверяет, имеет ли изображение, которое я хочу загрузить, необходимое соотношение. Если изображение имеет соотношение сторон, оно допускает обработку. В противном случае этого не произойдет. Проблема возникает, когда моя функция hasRatio длится несколько секунд, я получаю «не определено» вместо «ИСТИНА» или «ЛЮБОЕ СООБЩЕНИЕ». Я пытался использовать PROMISE, но не знаю, как с этим справиться. Подскажите, пожалуйста, что не так с моим кодом?
Вот мои функции:
$('.form-assync').submit(function (e) { е.preventDefault(); пусть $e = $(это); пусть $formClasses = $e.attr('класс'); пусть $x = $formClasses.split(' '); if ($x.indexOf('wait') !== -1) { //Отображение ошибки здесь } еще { let $image = document.getElementById("изображение"); if (($image != null && $image.files.length !== 0)) { //специальная проверка изображений с соотношением сторон let $imageClasses = $('#image').attr('class'); пусть $allowProcessing = false; if ($imageClasses.indexOf('with-ratio') !== -1) { //проверяем, имеет ли изображение необходимое соотношение пусть проверка = async () => { $allowProcessing = ждут hasRatioOne(); вернуть $allowProcessing; } проверка().then(функция (текст) { $allowProcessing = текст; //возвращаем TRUE или любое сообщение об ошибке }); } еще { $allowProcessing = правда; } //Обрабатывать или нет if ($allowProcessing !== true) { Оповещение ($allowProcessing); вернуть ложь; //остановим отправку формы } //Здесь делаем вызов AJAX с индикатором выполнения } еще { //Выполняем вызов AJAX без индикатора выполнения } вернуть ложь; } }); функция hasRatioOne() { вернуть новое обещание (функция (решить) { /* Здесь я буду выполнять задачи, чтобы проверить, имеет ли изображение соотношение и задачи длятся несколько секунд */ let $error = "У вашего изображения нет соотношения сторон"; setTimeout(функция () { разрешить ($ ошибка); }, 1000); }); } функция hasRatioTwo(){ вернуть истину; //функция вообще не длится долго } Я также пытался использовать обратный вызов, но результат всегда приходит после всплывающего оповещения
функция hasRatioThree(обратный вызов){ let $error = "У вашего изображения нет соотношения сторон"; setTimeout(функция () { обратный вызов ($ ошибка); }, 1000); } hasRatioThree (функция (результат) { разрешитьОбработка = результат; }); Как видите, если я использую «hasRatioTwo», у меня нет проблем, но когда я использую «hasRatioOne», у меня появляется «неопределенное».
Заранее благодарим за помощь.
Мобильная версия