promise介绍
promise是ES6的一个api,使用时需要new出一个实例,且里面有两个参数,一个是resolve代表成功状态,一个reject代表失败状态。
使用promise
原代码
var fs = require('fs')
fs.readFile('./src/a.txt', 'utf-8', function(err, data) {
if (err) {
throw err
}
console.log(data)
fs.readFile('./src/b.txt', 'utf-8', function(err, data) {
if (err) {
throw err
}
console.log(data)
fs.readFile('./src/c.txt', 'utf-8', function(err, data) {
if (err) {
throw err
}
console.log(data)
})
})
})
使用promise后
var fs = require('fs')
var p1 = new Promise(function(resolve, reject) {
fs.readFile('./src/a.txt', 'utf-8', function(err, data) {
if (err) {
reject(err)
}
resolve(data)
})
})
var p2 = new Promise(function(resolve, reject) {
fs.readFile('./src/b.txt', 'utf-8', function(err, data) {
if (err) {
reject(err)
}
resolve(data)
})
})
var p3 = new Promise(function(resolve, reject) {
fs.readFile('./src/c.txt', 'utf-8', function(err, data) {
if (err) {
reject(err)
}
resolve(data)
})
})
p1
.then(function(data) { //data等于成功后的 resolve(data)
console.log(data)
return p2
})
.then(function(data) { //data等于return 过来的p2执行成功后的resolve(data)
console.log(data)
return p3
})
.then(function(data) {
console.log(data)
})
将重复代码封装
var fs = require('fs')
function promisereadFile(readPath) {
return new Promise(function(resolve, reject) {
fs.readFile(readPath, 'utf-8', function(err, data) {
if (err) {
reject(err)
}
resolve(data)
})
})
}
promisereadFile('./src/a.txt')
.then(function(data) {
console.log(data)
return promisereadFile('./src/b.txt')
})
.then(function(data) {
console.log(data)
return promisereadFile('./src/c.txt')
})
.then(function(data) {
console.log(data)
})