promise思考

我写了三个单元块,分别对应三种业务场景

let query;
query = (url) => {
    url=url||"传递的参数为空";
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            console.log(url);
            if(true){
                resolve("我是promise执行后传递过来的数据");
            }else{
                reject();
            }

        }, 3000)
    }).catch((error)=>{console.log(error)});
};
//基本链式调用
//直接传入query会取上一个promise传递过来的参数,使用()=>query()会传递空参数,其他的就传递相应的参数
function basicChain(){
    query("test1")
        .then(query)
        .then(()=>"then 传递的参数")
        .then((data)=>query(data))
        .then(()=>query())
        .then(()=>query("test2"))
        .then(()=>query("test3"))
}

//按照一定顺序循环调用
function loopChain(){
    let queryloop=Promise.resolve(0);
    for(let j=0;j<10;j++){
        queryloop=queryloop.then(()=>query("test"+j));
    }
}

//无顺序执行promise;
function unsortChain(){
    let arrCreate=()=>{
        let arr=[];
        for(let i=1;i<11;i++){
            arr.push(query("test"+i));
        }
        return arr;
    }
    let arr=arrCreate();
    Promise.all(arr)
        .then(()=>{console.log("promise 全部执行了")})
        .catch(function(error){console.log(error)});
}

登录小逻辑
<script>
        let status = 1;
        let userLogin = (resolve, reject) =>{
            setTimeout(()=>{
                if(status == 1){
                    resolve({data:'登录成功', msg:'xxx', token:'xxsadfsadfas'});
                }else{
                    reject('失败了');
                }
            },2000);
        };

        let getUserInfo = (resolve, reject) =>{
            setTimeout(()=>{
                if(status == 1){
                    resolve({data:'获取用户信息成功', msg:'asdfasdf', token:'xxsadfsadfas'});
                }else{
                    reject('失败了');
                }
            },1000);
        }

        new Promise(userLogin).then(res=>{
            console.log('用户登录成功');
            return new Promise(getUserInfo);
        }).then(res=>{
            console.log('获取用户信息成功');
            console.log(res);
        })
    </script>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏轻扬小栈

Vim 常用快捷键及键盘图

1853
来自专栏阿炬.NET

Less学习笔记

2887
来自专栏大内老A

ASP.NET Web API标准的“管道式”设计

ASP.NET Web API的核心框架是一个消息处理管道,这个管道是一组HttpMessageHandler的有序组合。这是一个双工管道,请求消息从一端流入并...

1995
来自专栏专注 Java 基础分享

Java --- JSP2新特性

     自从03年发布了jsp2.0之后,新增了一些额外的特性,这些特性使得动态网页设计变得更加容易。jsp2.0以后的版本统称jsp2。主要的新增特性有如下...

2049
来自专栏前端小叙

jquery获取select多选框选中的值

1582
来自专栏xingoo, 一个梦想做发明家的程序员

Windows下elasticsearch插入数据报错!

  按照官方文档操作,但是windows下有些不同,它不认识单引号',因此如果这样操作,就会报错: C:\Users\neusoft>curl localhos...

19010
来自专栏每日一篇技术文章

go-runtime

runtime 包 提供了运行时与系统的交互,比如控制协程函数,触发垃圾立即回收等等底层操作,下面我们就运行时能做的所有事情逐个进行说明与代码演示

1014
来自专栏小樱的经验随笔

【批处理学习笔记】第三课:简单批处理命令(2)

cls 命令     清除屏幕。执行该命令后,屏幕上的所有信息都被清除,光标重新定位至屏幕左上角。 REM 和 :: REM为注释命令,一般用来给程序加上注...

3194
来自专栏angularejs学习篇

angularjs学习第一天笔记

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,...

893
来自专栏BestSDK

是不是Bash编程老司机,看完这10条细节就知道了

Bash,作为大部分 Linux 发行版的出厂预设 Shell,因其晦涩难懂的语法设置,以及需要特别留心的编程细节,几乎成为 Linux 区别于其他操作系统的代...

3467

扫码关注云+社区