promise对象
- 概念:
- promise 是一个 构造函数 , 我们就可以通过 new Promise() 得到一个Promise的实例对象
- 在Promise 上, 有两个函数分别叫做 resolve(成功后执行的回调函数) 和 reject(失败后执行的回调函数)
- 在Promise 构造函数的 prototype 属性上, 有一个 .then() 方法, 只要是Promise 构造函数创建的实例, 都可以访问到这个 .then()方法
- Promise 表示一个 异步操作; 每当我们new 一个 Promise的实例 , 而这个实例,就表示一个具体的异步操作
- 既然Promise 创建的实例 是一个异步的操作, 那么只能有两种的返回结果:
- 状态1 : 异步执行成功了,需要在内部调用,成功的回调函数 resolve 把结果返回给 调用者;
- 状态2 : 异步执行失败了,需要在内部调用,失败的回调函数 reject 把结果返回给 调用者;
- 由于Promise 的实例 是一个异步的操作,内部拿到的 结果 无法使用 return 把操作的结果返回给调用者, 这时候只能使用回调函数的形式 来把 成功/或者失败的结果 返回给调用者
- 我们可以在new 出来的 Promise实例上 调用.then()方法, 【预先】为这个Promise异步操作 指定 成功(resolve) 和 失败(reject) 回调函数;
Promise 对象的使用
-
// 注意 : 这里 new出来的 promise,只是代表【形式上】的一个 异步操作 var promise = new Promise(function (){ //这个function 内部写的 就是具体的异步操作 })
-
const fs = require('fs') //一个读取文件的异步操作 // 每当 new 一个 Promise 实例对象的时候, 就会立即执行 异步操作中的代码 var promise = new Promise (function (resolve,reject){ fs.readFile('./文件的路径','utf-8', (err,dataStr) => { //if(err) throw err //console.log(dataStr) if(err) return reject(err) resolve(dataStr) }) })
//封装一个 异步读文件的函数
function getFileByPath(fpath){
return new Promise (function (){
fs.readFile(fpath,'utf-8', (err,dataStr) => {
if(err) throw err
console.log(dataStr)
})
})
}
// 不调用 不执行
//注意: 通过.then 指定的回调函数 成功的必须有,失败的可以省略不写
getFileByPath('需要读文件的路径')
.then(function(data){
console.log(data)
},function(err){
console.log(err.message)
})
-
const fs = require('fs') //封装一个 异步读文件的函数 function getFileByPath(fpath){ return new Promise (function (){ fs.readFile(fpath,'utf-8', (err,dataStr) => { if(err) throw err console.log(dataStr) }) }) } getFileByPath('需要读文件的路径1') .then(function(data){ console.log(data) return getFileByPath('需要读文件的路径2') }) .then(function(data){ console.log(data) return getFileByPath('需要读文件的路径3') }) .then(function(data){ console.log(data) }) //前面的执行失败 立即终止执行 所有的Promise的执行 并立即进入catch 去处理 Promise 中 错误的异常 .catch(function(err){ console.log('这是失败的处理方式' + err.message) })
来源:https://blog.csdn.net/c_1040181179/article/details/98765070