发表于: 2018-04-28 21:51:30

1 474


今天的完成:

今天把任务4的有限状态机中的红绿灯例子自己写出来了,然后利用这个例子,把这个例子运用到4的四个点击状态中来。

今天的问题:

还不能理解如何把天数的有限状态机理解其中意思

今天的收获:

今天的收获不多,之前看了有限状态中的异步函数,就在网上搜集了一些资料。

对异步函数有一个简单的了解,

Javascript的优势之一是其如何处理异步代码。异步代码会被放入一个事件队列,等到所有其他代码执行后才进行,而不会阻塞线程

1 理解异步代码:

1.1 JavaScript最基础的异步函数是setTimeout和setInterval。setTimeout会在一定时间后执行给定的函数。它接受一个回调函数作为第一参数和一个毫秒时间作为第二参数。

console.log(1);

setTimeout(function() {

  console.log('a');

},1000);

setTimeout(function() {

  console.log('b');

},1000);

setTimeout(function() {

  console.log('c');

},1000);

console.log(2);

正如预期,控制台先输出1、2,大约500毫秒后,再看到“a”、“b”、“c”。我用“大约”是因为setTimeout事实上是不可预知的。实际上,甚至 HTML5规范都提到了这个问题:

“这个API不能保证计时会如期准确地运行。由于CPU负载、其他任务等所导致的延迟是可以预料到的。”

jQuery异步处理

异步Javascript与XML(AJAX)永久性的改变了Javascript语言的状况。突然间,浏览器不再需要重新加载即可更新web页面。 在不同的浏览器中实现Ajax的代码可能漫长并且乏味. 但是有些地方还是需要注意


var data;

$.ajax({

    url: "some/url/1",

    success: function( data ) {

        // 放在jquery指定的success函数里面可以保证异步请求完成

        console.log( data );

    }

})

// 这里并不能获取数据 ajax异步请求还未完成

console.log( data );

容易犯的错误,是在调用$.ajax之后马上使用data,但是实际上是这样的



xmlhttp.open( "GET", "some/ur/1", true );

xmlhttp.onreadystatechange = function( data ) {

    if ( xmlhttp.readyState === 4 ) {

        console.log( data );

    }

};

xmlhttp.send( null );

底层的XmlHttpRequest对象发起请求,设置回调函数用来处理XHR的readystatechnage事件。

然后执行XHR的send方法。在XHR运行中,当其属性readyState改变时readystatechange事件就会被触发,

只有在XHR从远端服务器接收响应结束时回调函数才会触发执行。



回调函数--处理异步

异步编程很容易陷入我们常说的“回调地狱”。因为事实上几乎JS中的所有异步函数都用到了回调,连续执行几个异步函数的结果就是层层嵌套的回调函数以及随之而来的复杂代码。

eg: Nodejs中常见异步函数


var fs = require( "fs" );

fs.exists( "index.js", function() { // 回调函数处理异步

    fs.readFile( "index.js", "utf8", function( err, contents ) { // 回调函数处理异步

        contents = someFunction( contents ); // do something with contents

        fs.writeFile( "index.js", "utf8", function() { // 回调函数处理异步

            console.log( "全部按顺序执行完" );

        });

    });

});

console.log( "executing..." );

明天的任务:

把任务4的杀人步骤,和死人状态写出来。



返回列表 返回列表
评论

    分享到