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 に応じてなにかの処理
})