簡單的jsonp實現promise

####jsonp 跨域請求的一種方式編程

####promise 一種實現異步編程的方式json

function p(url){
    let json;
    let s = document.createElement('script');
    s.src = url + '?callback=fn';
    window.fn = function(data){
        json = data;
    }
    //當script被插入文檔中時,src中的資源就會開始加載
    document.body.appendChild(s);
    
    return new Promise((resolve,reject)=>{
        /* throw('err in promise'); */
        s.onload = function(e){
            resolve(json);
        }
        s.onerror = function(){
            reject(json);
        }
    });
}
p('http://localhost:8082').then(data=>{
    console.log(data);
    throw('err before then');
}).catch(err => {
    //能夠捕捉到then裏的err befor then也能夠捕捉到new Promise裏的err in promise。
    console.log(err)
});

可是s.onload中的回調函數若是拋出錯誤的話,不能被p.catch捕獲到。由於onload的回調函數中的異常和promise無關。跨域

相關文章
相關標籤/搜索