首页 > 其他 > 详细

ES6 promise初体验

时间:2019-03-12 13:31:40      阅读:184      评论:0      收藏:0      [点我收藏+]

promise是ES6新增的语法,可用于解决回调地狱的问题

var fs = require(‘fs‘)

var p1 = new Promise(function (resolve, reject) {
    fs.readFile(‘./data/a.txt‘, ‘utf8‘, function (err, data) {
        if (err) {
            reject(err)  //失败,调用.then的第二个回调函数参数
        } else {
            resolve(data)//成功,调用.then的第一个回调函数参数
        }
    })
})

var p2 = new Promise(function (resolve, reject) {
    fs.readFile(‘./data/b.txt‘, ‘utf8‘, function (err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data)
        }
    })
})

var p3 = new Promise(function (resolve, reject) {
    fs.readFile(‘./data/c.txt‘, ‘utf8‘, function (err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data)
        }
    })
})

p1
    .then(function (data) {
        console.log(data)
        // 当 p1 读取成功的时候
        // 当前函数中 return 的结果就可以在后面的 then 中 function 接收到
        // 当你 return 123 后面就接收到 123
        //      return ‘hello‘ 后面就接收到 ‘hello‘
        //      没有 return 后面收到的就是 undefined
        // 上面那些 return 的数据没什么用
        // 真正有用的是:我们可以 return 一个 Promise 对象
        // 当 return 一个 Promise 对象的时候,后续的 then 中的 方法的第一个参数会作为 p2 的 resolve
        //
        return p2
    }, function (err) {
        console.log(‘读取文件失败了‘, err)
    })
    .then(function (data) {
        console.log(data)
        return p3
    })
    .then(function (data) {
        console.log(data)
        console.log(‘end‘)
    })

上面的例子使用起来很臃肿,封装一下

var fs = require(‘fs‘)

function pReadFile(filePath) {
    return new Promise(function (resolve, reject) {
        fs.readFile(filePath, ‘utf8‘, function (err, data) {
            if (err) {
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
}

pReadFile(‘./data/a.txt‘)
    .then(function (data) {
        console.log(data)
        return pReadFile(‘./data/b.txt‘)
    })
    .then(function (data) {
        console.log(data)
        return pReadFile(‘./data/c.txt‘)
    })
    .then(function (data) {
        console.log(data)
    })

 

ES6 promise初体验

原文:https://www.cnblogs.com/chuanzi/p/10515928.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!