异步的处理方案

2018-05-28  本文已影响0人  钱学敏

异步处理方案的几个阶段

const fs = require('fs')

//第一阶段 回调函数
function readFile(cb) {
    fs.readFile('./package.json', (err, data) => {
        if (err) return cb(err)

        cb(null, data)
    })
}
readFile((err, data) => {
    if (!err) {
        data = JSON.parse(data)

        console.log('第一阶段', data.name)
    }
})


//第二阶段  Promise

function readFileAsync(path) {
    return new Promise((resolve, reject) => {
        fs.readFile(path, (err, data) => {
            if (err) reject(err)
            else resolve(data)
        })
    })
}

readFileAsync('./package.json').then(data => {
    data = JSON.parse(data)

    console.log('第二阶段', data.name)
}).catch(err => {
    console.log(err)
})


//第三阶段 co + util.promisify + generator函数
const co = require('co') //jt
const util = require('util')
co(function*() {
    let data = yield util.promisify(fs.readFile)('./package.json')

    data = JSON.parse(data)

    console.log('第三阶段', data.name)
})



//第四阶段 Async 
const readAsync = util.promisify(fs.readFile)
async function init() {
    let data = await readAsync('./package.json')
    data = JSON.parse(data)
    console.log('第四阶段', data.name)
}

init()
上一篇 下一篇

猜你喜欢

热点阅读