使用Promise封装JSONP

使用Promise对一个JSONP库进行封装

JSONP库来自A simple JSONP implementation

创建一个JS文件,引入安装过的jsonp库。将文件暴露成一个方法,这个方法接收三个参数:url, data, option

由于原始的JSONP库在引入url前需要将url拼好,而我希望在引入url时只引入不带参数的url地址,而将所有的参数都放在data里。option则对应原始库中的option。

import originJSONP from 'jsonp'

export default function jsonp(url, data, option) {
  url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)

  return new Promise((resolve, reject) => {
    originJSONP(url, option, (err, data) => {
      if (!err) {
        resolve(data)
      } else {
        reject(err)
      }
    })
  })
}

function param(data) {
  let url = ''
  for (var k in data) {
    let value = data[k] !== undefined ? data[k] : ''
    url += `&${k}=${encodeURIComponent(value)}` // 拼接URL
  }
  return url ? url.substring(1) : '' // return时去掉&
}

本文参考