当前位置:首页 > 操作系统 > Windows

node.js在windows下的学习笔记(4)---同步,异步,回调的概念

Node.js是使用事件驱动的,非阻塞的I/O模型,用于构建快速的,可扩展的网络应用程序。

Node.js想解决的问题是:处理输入,输入,高并发

1.阻塞与非阻塞

阻塞也叫同步,是指每一次执行一个操作,在这个操作完成之前,代码的执行会被阻塞,无法移到下一个操作上。

阻塞就相当于你在超市里面买东西,结账,在排队,如果前面的人没买单,你就不能买,一定要等前面的人先执行完其操作才可以

非阻塞就相当于你在外婆家取号,然后就可以去干别的事情了,等轮到我们的时候,短信发到我们的手机上了,说轮到我们了,这样我们就可以回去吃饭了。

            <span>function</span>
            <span> sleep(milliseconds) {
  </span>
            <span>var</span> start = <span>new</span><span> Date().getTime();
  </span><span>while</span> ((<span>new</span> Date().getTime() - start) <<span> milliseconds){
  }
}

</span><span>function</span><span> fetchPage() {
  console.log(</span>‘fetching page‘<span>);
  sleep(</span>2000); <span>//</span><span> simulate time to query a database</span>
  console.log(‘data returned from requesting page‘<span>);
}

</span><span>function</span><span> fetchApi() {
  console.log(</span>‘fetching api‘<span>);
  sleep(</span>2000); <span>//</span><span> simulate time to fetch from an api</span>
  console.log(‘data returned from the api‘<span>);
}

fetchPage();
fetchApi();</span>

执行上面的代码结果如下:

Node.js几乎不使用这种编码风格,而是异步地调用回调

什么是回调呢?回调指的是将一个函数A作为参数传递给另一个函数B,并且通常在函数B完成后被调用。

                   1.异步地调用是由操作系统在后台进行相应的操作。

                   2.同步的代码会继续执行

                   3.当操作系统异步完成之后,调用回调函数来进行相应的结果展示

            <span>var</span> http = require(‘http‘<span>)

</span><span>function</span><span> fetchPage() {
  console.log(</span>‘fetching page‘<span>);
  http.get({ host: </span>‘trafficjamapp.herokuapp.com‘, path: ‘/?delay=2000‘ }, <span>function</span><span>(res) {
    console.log(</span>‘data returned from requesting page‘<span>);
  }).on(</span>‘error‘, <span>function</span><span>(e) {
    console.log(</span>"There was an error" +<span> e);
  });
}

</span><span>function</span><span> fetchApi() {
  console.log(</span>‘fetching api‘<span>);
  http.get({ host: </span>‘trafficjamapp.herokuapp.com‘, path: ‘/?delay=2000‘ }, <span>function</span><span>(res) {
    console.log(</span>‘data returned from the api‘<span>);
  }).on(</span>‘error‘, <span>function</span><span>(e) {
    console.log(</span>"There was an error" +<span> e);
  });
}

fetchPage();
fetchApi();</span>

非阻塞(异步)的代码执行的结果如下:

原文:http://www.cnblogs.com/michaeljunlove/p/3972053.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐