关于Promise的一些见解

###console.dir(Promise)


###Promise是一个构造函数,new Promise()可以得到一个实例
###resolve(成功后的回调函数)reject(失败后的回调函数)
-Promise的实例是异步操作,无法使用return,只能用回调函数,把成功或失败的两种结果返回给调用者

下面是一个简单的Promise的使用

function getFileByPath(fspath) {
    return new Promise(function (resolve, reject) {
        fs.readFile(fspath, 'utf-8', (err, dataStr) => {
            if (err) return reject(err)
            resolve(dataStr)
        })
    })
}

var p =getFileByPath('./a.txt')

//你可以理解为p 一瞬间已经解析完成了 返回了 promise,但此时还并没有数据,所以需要then一下,
//then执行完后就会才会确定得到了data或者err
p.then(function (data) {
    console.log(data + '++++++')
}, function (err) {
    console.log(err + '------')
})

以下是错误的回调

getFileByPath('./a.txt').then(function (data) {
    console.log(data + '++++++')
    getFileByPath('./a.txt').then(function (data) {
        console.log(data + '++++++')
        getFileByPath('./a.txt').then(function (data) {
            console.log(data + '++++++')
        })
    })
})

这样写太丑了,不便于管理

正确的回调,这种方式如果a.txt出错后面的b.txt c.txt都不会执行

getFileByPath('./aa.txt')
    .then(function (data) {
        console.log(data)
        return getFileByPath('./b.txt')
    })
    .then(function (data) {
        console.log(data)
        return getFileByPath('./c.txt')
    })
    .then(function (data) {
        console.log(data)
    }).catch(function (err) { 
    // catch 的作用: 如果前面有任何的 Promise 执行失败,则立即终止所有 promise 的执行,并 马上进入 catch 去处理 Promise中 抛出的异常;
    console.log('这是自己的处理方式:' + err.message)
  })

还有一种抛出错误的方式 ,如下

getFileByPath('./aa.txt')
    .then(function (data) {
        console.log(data)
        return getFileByPath('./b.txt')
    }, function (err) {
        console.log(err)
        return getFileByPath('./b.txt')
    })
    .then(function (data) {
        console.log(data)
        return getFileByPath('./c.txt')
    }, function (err) {
        console.log(err)
        return getFileByPath('./b.txt')
    })
    .then(function (data) {
        console.log(data)
    }, function (err) {
        console.log(err)
        return getFileByPath('./b.txt')
    })

这一种方式就算是a.txt有异常也不会影响b.txt c.txt的执行,到底用那种方式要看业务的具体要求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值