В моем скрипте мне нужно сделать XML-запрос, получить ответ от сервера (если разрешен), проанализировать его и поместить проанализированный результат в переменную.
Только позже, с этой переменной я могу делать много вещей.
Итак, я пытаюсь отделить создание такого объекта синтаксического анализатора от остальной части моего кода, чтобы:
- поместите описанный выше процесс в функцию во внешнем скрипте, который я могу вызывать всякий раз, когда мне нужно.
- не весь мой код в методе
.then()
- организовать мой код в логические файлы, каждый из которых посвящен определенной задаче
Итак, я придумал этот кусок кода (просто пример), чтобы объяснить мои потребности.
Поскольку я довольно новичок в асинхронном программировании, было бы неплохо поступить так, учитывая, что ответ должен быть очень быстрым, чтобы восстановить (или отклонить) в моем случае?
Если все в порядке, я бы поместил это в отдельный файл, чтобы иметь возможность его импортировать, и позвонил бы testing()
(или какому-либо другому имени) из любого места, где мне нужно.
function delay(input) {
return new Promise(function(resolve, reject) {
// some async operation here
setTimeout(function() {
// resolve the promise with some value
resolve(input + 10);
}, 500);
});
}
function testing() {delay(5).then(result => {return document.write(result)})};
testing();
EDIT
Хорошо, я думаю, что столкнулся с проблемой благодаря ответу @DrewReese и ссылкам в комментариях.
Я пытаюсь разрешить эту ситуацию: приведенный выше код вводит в заблуждение, чтобы понять мою точку зрения, но я думаю, что это не совсем простое решение.
Посмотрите на этот код (он в основном такой же, как приведенный выше, за исключением последних трех строк):
function delay(input) {
return new Promise(function(resolve, reject) {
// some async operation here
setTimeout(function() {
// resolve the promise with some value
resolve(input + 10);
}, 500);
});
}
function testing() {delay(5).then(result => {return result})};
var test = testing();
document.write(test);
Так что в этом случае я знаю, что при определении test
вывод равен 'undefined'
, потому что Обещание в testing()
еще не разрешено.
Проблема, которую я пытаюсь решить, заключается в следующем: есть ли (если таковые имеются) способ определить тест только тогда, когда Обещание разрешено, не заключая его в then()
и, возможно, вывести что-то другое, когда оно не решено (например, " ЗАГРУЗКА ... ").
Я не знаю, в принципе, возможно ли проверить, есть ли у переменной значение Promise в ожидании и вывести два разных значения: когда она ожидает и когда она разрешена / отклонена.
Надеюсь, я был достаточно ясен, иначе я протестирую больше и при необходимости вернусь с другим вопросом.