Описание
После небольшой дискуссии решил создать собственную версию window.prompt(). Моя версия выглядит так:
class Manager {
static async prompt(message) {
const dialog = document.body.appendChild(document.createElement(`dialog`));
dialog.appendChild(document.createElement(`span`)).innerText = message;
const input = dialog.appendChild(document.createElement(`input`));
input.type = `text`;
const promise = new Promise((resolve) => {
dialog.addEventListener(`click`, (event) => {
if (event.target == dialog) {
resolve(input.value);
dialog.remove()
}
});
});
dialog.showModal();
return await promise;
}
}
document.write(Manager.prompt(Input text));
* {
margin: 0;
padding: 0;
border: none;
outline: none;
}
body {
background-color: rgb(25, 25, 25);
color: rgb(255, 255, 255);
}
body * {
background-color: inherit;
color: inherit;
border-radius: 8px;
}
dialog {
background-color: rgb(50, 50, 50);
display: flex;
flex-direction: column;
gap: 8px;
margin: auto;
padding: 8px;
}
input {
background-color: rgb(25, 25, 25);
padding: 8px;
}
dialog::backdrop {
background-color: rgba(0, 0, 0, 50%)
}
После ввода надо нажимать вне окна и значение передается. Проблема в том, что, чтобы я не делал, где бы я не пимал async и await передается Promise<String>.
Вопрос
Но что мне делать, чтобы передавалась просто String, как во встроенной версии.
Уточнение
Возможно проблема в том, что я неправильно реализовал async и await, поскольку немного работал с ними и не все тонкости знаю. Так что с удовольствием приму и статью где, есть решение моей проблемы и объяснения - почему так происходит.
fetch, с новойPromiseи.т.д., но нигде нет ни один единственный случай с нажатием кнопки или какого-то другого обработчика. – eccs0103 Jan 02 '23 at 14:54fetch, в указанном @Grundy дубликате, в ответах достатоточно подробно описано, почему нельзя работать с асинхронными функциями т.к. хотите вы. И там даны множество обходных путей. Так что вопрос как по мне закрыт правильным дубликатом – EzioMercer Jan 02 '23 at 16:35awaitи получишь нужно значение, о чем и указано в дубликате. – Grundy Jan 02 '23 at 17:36