コード
単品
new Promise(resolve => {
let e = document.createElement(`script`)
e.src = // JavaScript URL
document.head.appendChild(e)
e.onload = () => {
resolve()
}
})
.then(() => {
// 処理
})
複数
let scriptFiles = {
// JavaScript URL
}
let promiseArray = []
for (let i of scriptFiles) {
promiseArray
.push(
new Promise(resolve => {
let e = document.createElement(`script`)
e.src = i
document.head.appendChild(e)
e.onload = () => {
resolve()
}
})
)
}
Promise.all(promiseArray)
.then(() => {
// 処理
})
経緯
ライブラリ的に複数の JavaScript ファイルを読み込んで処理しようとしたのですが、どうもライブラリ的なやつのロード終了より先に処理が始まって不具合が生じるようでした。これの解決のために取った策が今回の記事です。
読み込むファイル側で Export しているならまた書き方が変わるし、もしかしたら不具合は起きなかったかもしれません。でも今回はそうではなかったので。
読み込むファイルを fetch() してどうにかならないかと最初は思ったのですが、読み込んだからといって、その生テキストをどうにもできず。 HTML の script タグの中にテキストを流し込んでやれば……? なんか泥くさいのでやめました。
それでも結局は HTML の script タグを挿入という泥くさいっぽいやり方になりました。まぁ動いたからいいや。