###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的执行,到底用那种方式要看业务的具体要求