结合Promise 封装JSONP方法

2020-06-18  本文已影响0人  泰然自若_750f

jsonp

jsonp是一种前端开发中跨域的解决方案。利用了script 标签可以跨域请求的特性。
实现步骤

/**
  * 
  * @param {*} param0 
  */
function jsop({url,params={},callback,timeout=5000}){
        
       return new Promise((resolve,reject)=>{
         //创建标签
         let script=document.createElement('script');
         //回调的函数名(加上时间戳有效里面重复)
          const fnName=`jsonp_${new Date().getTime()}`;
          let paramsArr=[];
          //遍历参数 的key-value
          Object.keys(params).forEach(key=>{
                 paramsArr.push(`${key}=${params[key]}`)
          })
  
          paramsArr.push(`callback=${fnName}`);
          url+=`?${paramsArr.join('&')}`;
          console.log(url);
          //配置超时
          let timer= setTimeout(()=>{
              reject({error:'-1',msg:'请求超时'});
          },timeout);
          //回调函数
          window[fnName]=function(res){
            //删除标签
            delete script;
            delete window[fnName];
            //清除计时器
            clearTimeout(timer);
            delete script;
            delete window[fnName];
            //返回结果
            resolve(res);
         
          };
          script.src=url;
          document.body.appendChild(script);

       })
      
  
}
/**
 * 测试
 */
jsop({
    url:'https://api.asilu.com/weather/',
    params:{a:"1"},
    timeout:3000
}).then(res=>{
  console.log(res)

},error=>{
     console.log(error)
})

上一篇下一篇

猜你喜欢

热点阅读