欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

es6中异步编程 Promise 讲解

程序员文章站 2022-04-06 20:05:04
...
//引入模块let fs=require('fs');
    //异步读文件方法,但是同步执行function read(url) {
    //new Promise 需要传入一个executor 执行器 //executor需要传入两个函数 resolve reject return new Promise((resolve,reject)=> {
    fs.readFile(url,'utf8',function (err,data) {
    if(err) {
    reject(err) }
else {
    resolve(data);
}
}) }
)
}
;
    //缺点 套了一个promise,而且捕获了2次,这两个请求没有依赖关系,时间叠加了// read('./name.txt').then((data)=> {
    // let obj= {
    }
;
    // obj.name=data;
    // read('./age.txt').then((data)=> {
    // obj.age=data;
    // console.log(obj);
    // }
,(err)=> {
    // console.log(err);
    // }
)//
// }
, (err)=> {
    // console.log(err);
    // }
);
    //回调地狱 链式调用//相对好点的方法,同步两个异步依次执行 异常用catch捕获// let obj= {
    }
;
    // read('./name.txt').then((data)=> {
    // obj.name=data;
    // return read('./age.txt')// }
).then((data)=> {
    //如果promise返回promise可以继续then// obj.age=data;
    // return obj //将结果向下继续传递// }
).then((data)=> {
    // console.log(data) //单独处理结果// }
).catch((err)=> {
    // console.log(err)// }
);
    //all方法是promise是类上自带的方法,并发读取,失败一个都失败了,时间只是一个读取的时间//第一个参数 传递的是数组,数组装的是一个个promise对象//调用后会再次返回一个promise实例//最好的写法Promise.all([read('./name.txt'),read('./age.txt')]).then(([name,age])=> {
    //data就是promise执行成功的结果类型是数组 console.log( {
    name,age
}
);
}
).catch((err)=> {
    console.log(err)
}
)//race如果一个失败了,都失败,如果一个成功了都成功,很少用// Promise.race([read('./name.txt'),read('./age1.txt')]).then((data)=> {
    // //data就是promise执行成功的结果类型是数组// console.log(data);
    // }
).catch((err)=> {
    // console.log(err)// }
)

以上就是es6中异步编程 Promise 讲解的详细内容,更多请关注其它相关文章!