非同期関数を export してそれを使う側が呼び出すのがよくあるやつ

[index.html]
<script type="module">
import getData from "./module1.js"

!async function() {
const data = await getData()
document.body.append(data.text)
}()
</script>

[module1.js]
export default () => {
return new Promise(r => {
setTimeout(() => {
r({ text: "loaded" })
}, 3000)
})
}

だけど考えてみると Promise をエクスポートすることもできるのでこれで良さそう

[index.html]
<script type="module">
import data from "./module1.js"

!async function() {
const { text } = await data
document.body.append(text)
}()

</script>

[module1.js]
export default new Promise(r => {
setTimeout(() => {
r({ text: "loaded" })
}, 3000)
})

呼び出すたびに新しく取得する必要のないデータなら 初回呼び出しの結果をキャッシュして 2 回目以降を非同期処理なしで前回の結果を返す仕組みを自作しなくてもいいし