All files / utils jsonp.ts

100% Statements 10/10
100% Branches 1/1
100% Functions 3/3
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30    24x                       1x 1x 1x 1x 1x   1x 1x 1x 1x            
import { loadResource, LoadResourceUrlType } from './loadResource'
 
let i = 0
 
/**
 * 发起 jsonp 请求。
 *
 * @param url 请求地址
 * @param keyOfCallbackName 回调函数名的键
 */
export function jsonp<T>(
  url: string,
  keyOfCallbackName = 'callback',
): Promise<T> {
  return new Promise<T>((resolve, reject) => {
    const callbackName = `__vtils_jsonp_callbacks__${i++}`
    ;(window as any)[callbackName] = (result: T) => {
      resolve(result)
      delete (window as any)[callbackName]
    }
    const _url = new URL(url)
    _url.searchParams.set(keyOfCallbackName, callbackName)
    url = _url.toString()
    loadResource({
      path: url,
      type: LoadResourceUrlType.js,
    }).catch(reject)
  })
}