promise的API封装
promisepromise基本概念promise用来解决回调地狱问题,使代码更加优雅简洁,方便维护promise是Ecamscript 6 中新增的一个APIpromise 本身是一个容器,里面封装了异步任务。这个异步任务本身的默认状态为pending,当任务执行成功时转为resolve当失败时转为rejectedpromise本身并不是异步的,但其内部封装的大部分是异步任务promise 是一
·
promise
promise基本概念
promise用来解决回调地狱问题,使代码更加优雅简洁,方便维护
- promise是Ecamscript 6 中新增的一个API
- promise 本身是一个容器,里面封装了异步任务。
- 这个异步任务本身的默认状态为pending,
- 当任务执行成功时转为resolve
- 当失败时转为rejected
- promise本身并不是异步的,但其内部封装的大部分是异步任务
- promise 是一个构造函数,容器一旦建立就会执行里面的代码
-
promise基本概念图示
promise基本代码
var fs = require('fs')
var p1 = new Promise(function (resolve, reject) {
fs.readFile('./data/a.txt','utf8',function (err,data) {
if(err) {
//如果任务失败了,就把pending改为rejected状态
//调用reject相当于调用了then()方法的第二个参数方法
reject(err)
} else {
//如果任务成功了,就把pending改为resolve状态
//调用resolve相当于调用了then()方法的第一个参数方法
resolve(data)
}
});
})
//p1就是那个承诺
//.then() 当P1成功了,然后(then)做指定的操作
//then方法接收的function就是容器中的resolve()和reject()
p1
.then(function (data) {
console.log(data);
}, function (err) {
console.log('读取文件失败了',err)
})
promise 基本代码图示
可直接return一个promise对象
只返回一些数据并没有什么意义,promise最强大的地方在于可以返回一个promise对象,然后在后面的then中操作
-
当return一个promise对象时,
- 后续的then中的方法中的第一个参数会作为一个p2的resolve()
- 第二个参数作为p2的reject()
具体代码
var fs = require('fs')
new Promise(function (resolve, reject) {
fs.readFile('./data/a.txt','utf8',function (err,data) {
if(err) {
//如果任务失败了,就把pending改为rejected状态
//调用reject相当于调用了then()方法的第二个参数方法
reject(err)
} else {
//如果任务成功了,就把pending改为resolve状态
//调用resolve相当于调用了then()方法的第一个参数方法
resolve(data)
}
});
})
var p2 = new Promise(function (resolve, reject) {
fs.readFile('./data/b.txt','utf8',function (err,data) {
if(err) {
//如果任务失败了,就把pending改为rejected状态
//调用reject相当于调用了then()方法的第二个参数方法
reject(err)
} else {
//如果任务成功了,就把pending改为resolve状态
//调用resolve相当于调用了then()方法的第一个参数方法
resolve(data)
}
});
})
//p1就是那个承诺
//.then() 当P1成功了,然后(then)做指定的操作
//then方法接收的function就是容器中的resolve()和reject()
p1
.then(function (data) {
console.log(data);
//可以return一个promise对象
//当return一个promise对象时,
// 后续的then中的方法中的第一个参数会作为一个p2的resolve()
// 第二个参数作为p2的reject()
return p2
}, function (err) {
console.log('读取文件失败了',err)
})
.then(function(data) {
console.log(data);
})
promise的API的封装
var fs = require('fs')
//pReadFile()为回调函数,filePath为文件路径参数
function pReadFile(filePath) {
//直接返回一个promise对象
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 的第一个参数函数是resolved处理,第二个是rejected处理
.then(function (data) {
console.log(data)
return pReadFile('./data/b.txt')
})
.then(function(data) {
console.log(data)
})
更多推荐
已为社区贡献1条内容
所有评论(0)