中铝国际山东建设有限公司网站,南山商城网站建设哪家便宜,网站建设插导航条,做网站的桔子什么Promise:
es6中为了解决回调地狱问题而产生的
Promise的参数
Promise的参数是一个函数.每个Promise在实例化时,都会立即执行参数里的函数
const p new Promise((){console.log(1);
})// 解释了上面的第2条Promise参数的参数
Promise的参数(函数),默认有2个参数(resol…Promise:
es6中为了解决回调地狱问题而产生的
Promise的参数
Promise的参数是一个函数.每个Promise在实例化时,都会立即执行参数里的函数
const p new Promise((){console.log(1);
})// 解释了上面的第2条Promise参数的参数
Promise的参数(函数),默认有2个参数(resolve,reject).译为:成功的回调、失败的回调每个Promise实例都可以通过.then方法传入,成功的回调和失败的回调
// 先假设拿到了数据
const p new Promise((resolve,reject){setTimeout((){const data async resolve data;resolve(data);},1000);
});// 使用异步得到的data,通过.then()方法传入回调函数
p.then((data){console.log(data);
})封装异步读取文件操作
fs.readFile()方法用于异步读取文件(node核心模块)将Promise的实例对象作为函数的返回值返回这样函数执行完毕后就得到一个Promise对象的实例,可以通过.then方法传入成功的回调和失败的回调
const fs require(fs);
const path require(path);function asyncGetFileByPath(p) {return new Promise((resolve, reject) {// Promise对象里面的参数,会立即执行(前面说过)fs.readFile(path.join(__dirname, p), utf-8, (err, data) {if (err) {reject(err);} else {resolve(data);}})})
}
asyncGetFileByPath(./files/1.txt).then((data) { // 成功的回调console.log(data);},(err) { // 失败的回调console.error(err);})解决回调地狱
前面已经成功的封装了一个读取文件的函数下面用它来体验一下读取多个文件我们在.then()方法中,第一个参数resolve()方法中,返回一个promise对象B.那么在执行.then()的resolve()方法完毕后,此时的执行环境是这个Promise的实例b可以通过b的.then()方法继续传入resolve取消回调地狱,让代码趋于扁平化
const fs require(fs);
const path require(path);function asyncGetFileByPath(p) {return new Promise((resolve, reject) {// Promise对象里面的参数,会立即执行(前面说过)fs.readFile(path.join(__dirname, p), utf-8, (err, data) {if (err) {reject(err);} else {resolve(data);}})})
}
asyncGetFileByPath(./files/1.txt).then((data) { // 成功的回调 1.txtconsole.log(data); // 打印出 1.txt 数据return asyncGetFileByPath(./files/2.txt)},(err) { // 失败的回调console.error(err);}).then( // 成功的回调 2.txt(data) {console.log(data); // 打印出 2.txt 中的数据return asyncGetFileByPath(./files/3.txt) // 继续返回Promise对象的实例},(err) {console.error(err);}).then((data) { // 成功的回调 3.txtconsole.log(data); // 打印出 3.txt 中的数据},(err) {console.error(err);})