Node.js入门 -- 10. 同步和异步

1. 什么是同步?

同步:上一行执行完后下一行才能得到执行

2. 什么是异步

异步:将比较复杂的任务制作成任务线程,以任务线程实现,不用等上一句执行完,下一句也可以执行

2.1 异步实现的三种方式
2.1.1 回调函数

异步一定有回调函数,回调函数不一定是异步。
比如回调函数forEach(function(value,index,arr){})是同步的

2.1.2 事件

事件源.on('事件名称',回调函数);

var http = require('http');
var server = http.createServer();
server.on('require',function(req,res){...});
server.listen(80,function(){...});
2.1.3 promise

是ES6中新增的承诺对象,用于对异步的操作进行消息的传递

  1. 它有3个状态

Pending 等待中
Resolved 成功
Rejected 失败

  1. 状态的转化

Pending --> Resolved
pending --> Rejected

  1. 用处

可以用于传递异步消息。由于异步的返回结果时间顺序不可控,所以需要使用promise来统一控制输出结果。

var fs = require('fs');

var p1 = new Promise(function(resolve,reject){
    fs.readFile('./2-file1.txt',function(err,data){
        if(err){
            reject('file1读取文件出错了!');
        }else{
            resolve(data.toString());
        }
    });
});

var p2 = new Promise(function(resolve,reject){
    fs.readFile('./2-file2.txt',function(err,data){
        if(err){
            reject('file2读取文件出错了!');
        }else{
            resolve(data.toString());
        }
    });
});


//利用promise对象的all方法可以实现手动调整输出的顺序,相当于把异步变成同步,但其实还是异步
Promise.all([p1,p2]).then(function(datas){
    console.log(datas);
},function(errs){
    console.log(errs);
});
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 2,763评论 0 5
  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,741评论 1 56
  • 目录:Promise 的含义基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry阅读 1,506评论 0 8
  • 原文地址:http://es6.ruanyifeng.com/#docs/promise Promise 的含义 ...
    AI云栈阅读 906评论 0 7
  • 摘自:阮一峰 http://es6.ruanyifeng.com/#docs/promise 一、首先,我们要弄明...
    泡杯感冒灵阅读 808评论 0 4