前端异步那些年

js 本身最大的卖点就是异步回调,可是又老是在一路上撒泼同样在脱掉这一块外衣。

1: 最原始的回调实现javascript

const fs = require('fs')
function readFileOne(path,callback){
  fs.readFile(path,function(err,res){
      if(!err) {
        callback.call(null,null, res.toString() )
      }else{
         callback.call(null,err)
      }
  })
}
readFileOne('./test.json',function(err,res){
    console.log(res)
})

没毛病,上面的代码很容易就实现了读取文件的操做,回调函数很方便,惋惜半路杀出一个promisejava

2: promise 实现异步写法node

const fs = require('fs')
function readText(){
   return new Promise((resolve,reject)=>{
       fs.readFile('./test.json',(err,res)=>{
           if(err){
               reject(err)
           }else{
              resolve(res)
           }
       })
   })
}


readText().then((res)=>{
    console.log(res.toString())
}).catch((e)=>{
     console.log(e)
})

也彻底没有毛病,实现手段上更加流化,实现了异步代码同步化写,然毛线,又出来一个 Generate],这个是个什么东西?能够看个人另外一篇文章 javascript中 迭代器是个什么东西?json

3: generate 迭代器 实现异步promise

const fs = require('fs')

// 8.x版本node内置将函数转化为`pronmise`的方法
const { promisify } =  require('util')

const proFiles = promisify(fs.readFile)
function* readFile(path){
     yield proFiles(path)
}

var g = readFile('./test.json')
    g.next().value.then((r)=>{
       console.log(r.toString() )
    })

4: generate 尚未用熟练,es7最终出了终极解决方法 Async 异步

async 更加语义化比generator,也不仅仅是相对于异步请求,async

const proFiles = promisify(fs.readFile)
const readFile = async function (path){
    let res = await proFiles(path)
    return res
}


readFile('./test.json').then((res)=>{
   console.log(res.toString())
})

这个是最简单的 async同步使用方式,更加复杂的能够i查看;这里值是抛砖引玉函数

相关文章
相关标签/搜索