2014-11-23 32 views
-2

假設我有包含內容的txt文件 - 1st print爲什麼這個文件讀取是異步的?

我有這個文件讀取程序 -

var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP'); 

function loadFile() { 
    reader.open('get', 'file.txt', true); 
    reader.onreadystatechange = displayContents; 
    reader.send(null); 
} 

function displayContents() { 
    if(reader.readyState==4) { 
     if(reader.status === 200 || reader.status == 0) { 
     console.log(reader.responseText); 
     } 
    } 
} 

loadFile() ; 
console.log("2st print"); 

,當我運行它,我得到異步結果 -

2nd print 
1st print 

後續計劃爲同步的結果 -

function readTextFile(file) 
    { 
     var rawFile = new XMLHttpRequest(); 
     rawFile.open("GET", file, false); 
     rawFile.onreadystatechange = function() 
     { 
      if(rawFile.readyState === 4) 
      { 
       if(rawFile.status === 200 || rawFile.status == 0) 
       { 
        var allText = rawFile.responseText; 
        console.log(allText); 
       } 
      } 
     } 
     rawFile.send(null); 
    } 


    readTextFile("file.txt"); 
    console.log("2nd print"); 

結果 -

1st print 
2nd print 

什麼原因在第一個程序異步?

+1

這裏可能是第三個布爾參數'rawFile.open(「GET」,file,false);' – Jashwant 2014-11-23 09:34:30

回答

1

找到該資源。

請參閱mozilla docs。在open功能

第三參數是設置sync

void open( DOMString method, DOMString url, optional boolean async, optional DOMString user, optional DOMString password );

同步true異步,和false

3

open的第三個參數是XHR對象是異步工作(true)還是同步工作(false)。後者在處理請求時具有鎖定瀏覽器UI的負面影響,因此儘可能避免(並且基本上始終可能),這是最好的避免。