为什么这个文件读取是异步的?

时间:2014-11-23 09:29:54

标签: javascript asynchronous

假设我有包含内容的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

第一个程序中异步的原因是什么?

2 个答案:

答案 0 :(得分:3)

open的第三个参数是XHR对象是异步(true)还是同步(false)。后者具有在处理请求时锁定浏览器的UI的负面影响,因此最好尽可能避免(并且它基本上总是可行的)。

答案 1 :(得分:1)

找到资源。

参考mozilla docs

open函数中的第三个参数是设置sync

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

true表示异步,false表示同步。