zoukankan      html  css  js  c++  java
  • promise扩展一个stop方法

    最近遇到一个很有意思的问题,就是怎么给promise提供一个stop方法,专门用来打断promise的等待状态,使它进入reject状态,也就是进入catch。

    我苦思冥想了大半天,也写了大半天的代码,发现无从下手。

    无从下手的点是,我不知道在外部怎么使promise直接进入拒绝状态。

    然后我去思考stop方法的应用场景。

    像之前用promise,一般都是异步操作,然后用await 等异步操作完了,再进入下一步。

    用stop方法的话,这意味着异步操作执行了后直接不管,扔在一边,在其他地方达到了某个要求,然后把之前的异步操作给中断了。

    我始终说服不了自己,为什么要扩展一个stop方法,promise.race不就可以了吗?

    但我总感觉stop这个方法,会很有用。

    比如下面的两个例子,我发现了promise.race的短板,也突然发现stop还是有点用处的。

    1、请求a和请求b,两个一起请求,请求a先请求到了,就把请求b给中断了。

       用promise.race的话,也是两个一起请求,请求a先请求到了,执行了promise.race里的then方法,但请求b所在的promise里的方法还在执行,虽然它没有then和catch接住。

    2、请求a和请求b,两个一起请求,请求a先报404了,请求b接着请求到了。

          用promise.race的话,也是两个一起请求,请求a先报404了,执行了promise.race里的catch方法,但请求b所在的promise里的方法还在执行,虽然它没有then和catch接住。

    然后言归正传,还是想怎么扩展一个stop方法,我几乎是找不到办法去扩展,然后用了下面的这种方法。

    function promise2(cb){
            this.p = new Promise((resolve,reject)=>{
                this.stop = reject;
                cb(resolve,reject);
            });
        }
        var p = new promise2((resolve,reject) =>{
            setTimeout(()=>{
                resolve("哈哈你大爷");
            },3000);
        });
        var p2 = p.p.then((data)=>{
            console.log(data);
        }).catch((err) =>{
            console.error(err);
        })
    
        p.stop("一切结束了");

    如果你有更好的扩展方式,请留言评论。

  • 相关阅读:
    Jmeter_完成文件批量下载
    Jmeter_文件的下载
    Jmeter_针对一个账户批量上传文件
    Jmeter上传文件操作
    Jmeter_获取结果写到excel
    Jmeter_接口串联自动化测试_登录后充值获取cookie
    JS 对象(Object)和字符串(String)互转
    全国图书馆参考咨询联盟关闭文献传递功能解决办法
    Geodesic Distance:两点间的最短距离之法截弧/等角航线/测地线
    空间数据库基础理论 GIS空间数据处理分析涉及的基本概念
  • 原文地址:https://www.cnblogs.com/huoan/p/js.html
Copyright © 2011-2022 走看看