Что я делаю не так?
Прежде всего, этот код:
let func = new Promise(function (res, rej) {
});
Создает обещание, которое никогда не будет разрешено или отклонено. Нужно иметь код внутри этой функции обратного вызова, который выполняет что-то асинхронное, и затем, когда эта асинхронная операция завершается, он вызывает одну из двух функций, переданных этому обратному вызову res(value)
или rej(reason)
. Здесь два аргумента для этой функции обратного вызова: function (res, rej) {
- это функции, которые обещание создало и передало обратному вызову. Твоя работа как создателя обещания - позвонить одному из них в будущем. Обещание, в котором нет кода, который когда-либо вызывает один из них, бесполезно. Это просто объект, который ничего не делает.
Во-вторых, этот код также присваивает вновь созданное обещание переменной с именем func
. Это означает, что вы думаете, что это функция. Не то. Это объект, точнее объект обещания. Вы не можете вызывать этот объект, как функцию.
В-третьих, вы берете это обещание и передаете его здесь как функцию обратного вызова:
btn.addEventListener("click", func);
addEventListener()
нуждается во втором аргумент, чтобы быть функцией. Вы передали обещание, которое не является функцией. Это ошибка вызова.
Без дальнейшего описания (словами) того, что вы пытаетесь выполнить, sh, мы не можем дать более конкретные c предложения по кодированию, кроме как ответить на ваш Прямой вопрос и объясните, что вы делаете неправильно с кодом, который вы показываете.
Кроме того, имейте в виду, что обещания являются одноразовыми устройствами. Они никогда не могут быть решены или отклонены более одного раза. Как таковые, они часто не очень хорошо совпадают со слушателями событий, когда событие может происходить более одного раза (например, нажатие кнопки), если только вы не хотите знать только о первом щелчке и последующих щелчках. Они хорошо совпадают с событиями, которые происходят только один раз, например finished
или close
, или с какими-то подобными событиями.