onclick みたいなイベントにするから起きるのであって
Promise にすれば 1 回限りのはず

document.querySelector("#submit").addEventListener("click", () => {
form.resolve()
})

form.then(async () => {
const response = await fetch("/path/to/api", {
method: "POST",
headers: { "Content-Type": "applicatin/json" },
body: JSON.stringify(values),
})

// response に応じてなにかの処理
})