2017-08-08 44 views
0

這是我的代碼:我不明白阿賈克斯,承諾與XMLHttpRequest的

const getXHR = (type, url) => { 

    let xhr = new XMLHttpRequest(); 

    let p = new Promise(function(resolve, reject) { 

    xhr.onload = function() { 
     if(xhr.status >= 200 && xhr.status < 400) { 
      resolve(xhr.responseText); 
     } else { 
      reject(new Error(`Error. Code ${xhr.status}`)) 
     } 
    }; 

    xhr.onerror = function() { 
     reject(new Error(`Error. Problem with connection`)); 
    } 

}); 

xhr.open(type, url); 

return {xhr, p}; 

}; 

export default { 

get(url) { 

    var _getXHR = getXHR('GET', url), 
     xhr = _getXHR.xhr, 
     p = _getXHR.p; 

    xhr.send(); 

    return p; 

    } 
} 

我不明白爲什麼我要使用此代碼來得到它的工作:

var _getXHR = getXHR('GET', url), 
     xhr = _getXHR.xhr, 
     p = _getXHR.p; 

而不是這樣:

var xhr = getXHR('GET', url).xhr, 
    p = getXHR('GET', url).p; 

這是什麼問題?對我來說,它是令人興奮的相同的代碼行。我會很感激任何幫助。也許有人有一個鏈接,我可以找到答案?

謝謝

回答

1
var xhr = getXHR('GET', url).xhr, 
p = getXHR('GET', url).p; 

創建兩個請求,然後獲得第一的XHR對象,第二個的承諾。第一個xhr請求是發送的,其中一個承諾總是處於未決狀態。所以這可能不起作用。可能會使用一些解構:

var { p, xhr } = getXHR('GET', url); 
xhr.send(); 
return p; 
+0

抱歉,但我仍然不明白 –