设为首页 加入收藏

TOP

es6异步编程 Promise 讲解 --------各个优点缺点总结
2017-10-10 12:41:29 】 浏览:9996
Tags:es6 异步 编程 Promise 讲解 -------- 各个 优点 缺点 总结
//引入模块
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)
// })

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇js重新讲解继承,es5的一些继承,.. 下一篇CSS中的路径裁剪样式clip-path

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目