zoukankan      html  css  js  c++  java
  • 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)
    // })
  • 相关阅读:
    ohmyzsh
    https://github.com/
    init 0,1,2,3,4,5,6
    关于反射
    docker学习笔记
    docker常见问题汇总
    ArrayList的sublist
    java-锁
    CAS-原子操作
    hashMap与concurrentHashMap
  • 原文地址:https://www.cnblogs.com/null11/p/7509467.html
Copyright © 2011-2022 走看看