0
点赞
收藏
分享

微信扫一扫

异步的实现

Separes 2021-09-24 阅读 50

异步的三种实现方式:

回调函数
事件
Promise

回调函数

回调函数不一定是异步

var arr = [1,2,3,4,5];
arr.forEach(function(i, v){
  console.log(v);
});

但是异步一定是回调函数。

事件

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

举例:

var http = require('http');
var server = http.createServer();
server.on('request', function(req, res){
  res.write('<h1>You are accessing Node.js server.</h1>');
});

server.listen(80, function(){
  console.log('Server is on run.');
});

Promise

承诺对象。用于传递异步操作的消息。它代表了某个未来才知道结果的事件(通常是一个异步事件),并且这个事件提供了一个统一的API,可供进一步处理。

特点:
状态不受外界影响。有三种状态,Pending(进行中),Resolved(已完成,又称Fulfilled)和Rejected(已失败)。这三种状态只能从一个转到另外一个。

Pending -> Resolved
Pending -> Rejected

用于解决异步返回消息的消息传递。

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

var fs = require('fs');

var p1 = new Promise(function(resolve, reject){
  fs.readFile('./file.txt', function(err, data){
    if(err){
      console.log('No data.');
    }else{
      resolve(data.toString());
    }
  })
});

p1.then(function(data){
  console.log(data);
}, function(err){
  console.log(err);
});

Promise实现异步消息传递

var p1 = new Promise(function(resolve, reject){
  fs.readFile('./file1.txt', function(err, data){
    if(err){
      console.log('No data.');
    }else{
      resolve(data.toString());
    }
  })
});

var p2 = new Promise(function(resolve, reject){
  fs.readFile('./file2.txt', function(err, data){
    if(err){
      console.log('No data.');
    }else{
      resolve(data.toString());
    }
  })
});

Promise.all([p1, p2]).then(function(data)){
  console.log(data);
});
举报

相关推荐

0 条评论