間違って回答欄に書いてしまいました。今さら削除依頼するのも何なので回答として書き直しました。 検証してないのでハズレだったらすみません。 検証しました。下の追記を見てください。
エラーメッセージでググってヒットした最初の記事 (url 下記) によると、async /
await をペアで使わないとそうなるそうです。
Fix - Await is only valid in async function Error in NodeJS
https://bobbyhadz.com/blog/node-await-is-only-valid-in-async-function#:~:text=The%20error%20%22await%20is%20only,directly%20enclosing%20function%20as%20async%20.
質問のコードでは関数に async を付与したが、関数内では await を使ってないのが問題のようです。
関数の内部で await を使うように関数内の構文を書き直すか、今のままのコードから async / await を削除したらどうなりますか?
【追記】
上に「関数の内部で await を使うように関数内の構文を書き直すか、今のままのコードから async / await を削除したらどうなりますか?」と書きましたが、それを検証してみました。
以下のコードの getData() が「async / await を削除」、getData2() が「関数の内部で await を使うように関数内の構文を書き直す」です。
<script type="text/javascript">
function getData() {
fetch("handler2.ashx", {
method: "POST"
})
.then(response => response.json())
.then(data => console.log(data))
}
async function getData2() {
const response = await fetch("handler2.ashx", { method: "POST" });
const data = await response.json();
console.log(data);
}
window.onload = async function () { getData(); await getData2(); }
</script>
例えば fetch で要求すると戻ってくる JSON 文字列が以下の場合、
[
{
"id": 1,
"name": "aaa"
},
{
"id": 2,
"name": "bbb"
},
{
"id": 3,
"name": "ccc"
}
]
上のスクリプトの実行結果は以下の画像のようになります。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。