先上代码,单次调用没有问题,连续两次调用就会出问题。
第二次调用 就会报如下错误:
Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
const getJsonpData = (options) => {
let script = document.createElement('script')
return new Promise((resolve, reject) => {
// option 结构示例
// const options = {
// function: 'InitiateLock',
// sn
// }
const jsonParam = 'json=' + JSON.stringify(options)
script.src = `http://127.0.0.1:17681/?callback=jsonpcallback&${jsonParam}`
document.head.appendChild(script)
window['jsonpcallback'] = (res) => {
if (res[0].errcode === 0) {
document.head.removeChild(script)
resolve(res)
} else {
document.head.removeChild(script)
reject(res)
}
}
script.onerror = function (e) { // script链接不上时提示下载插件
document.head.removeChild(script)
reject(e)
}
})
}
上面两位的回答表面看没有问题,实际上你如果同时执行两次,写一个函数 在该函数体内调用该方法两次,两次传不同参数,因为接口固定回调函数函数名为 jsonpcallback ,这样就会导致先执行的在
这里覆盖后面的。不知道大佬们有什么解决办法?
我试了一下 2 秒以后执行第二个函数就不会有问题,
那么可以在封装的时候使用节流的方法缓解该问题吗?