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)
})
本文介绍了ES6中Promise API的基本概念及其如何简化异步编程。通过对比传统回调地狱的写法,展示了使用Promise进行文件读取操作的优雅解决方案。文章还提供了封装Promise readFile函数的方法,进一步提高代码复用性和可读性。
440

被折叠的 条评论
为什么被折叠?



