有时我们做项目时,需要引入外部的脚本,有些是需要等脚本加载完才可以执行相关的代码。我们在 React 项目中,可以用 Promise
来做这件事儿。
首先需要如下加载脚本的函数:
function loadScript(src) {
return new Promise(resolve => {
let tag = document.createElement("script")
tag.async = true
tag.src = src
document.body.appendChild(tag)
tag.addEventListener("load", function() {
resolve()
})
})
}
当一个资源及其依赖资源已完成加载时,将触发 load
事件。
然后我们在组件的 componentDidMount()
里调用这个函数:
componentDidMount() {
Promise.all([
loadScript("/a.js"),
loadScript("/b.js"),
loadScript("/c.js")
]).then(() => {
// your code goes here
}
}
这样我们就实现了先加载完 a.js
, b.js
, c.js
这三个脚本再执行相关代码,这里我们需要加载三个脚本,用到了 Promise.all(iterable)
, 这个方法返回一个新的 promise 对象,该 promise 对象在 iterable 参数对象里所有的 promise 对象都成功的时候才会触发成功,一旦有任何一个 iterable 里面的 promise 对象失败则立即触发该 promise 对象的失败。
如果只加载一个脚本,可以这样:
componentDidMount() {
loadScript("/a.js").then(() => {
// your code goes here
}
}