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 条评论
登录 后参与评论

相关文章

来自专栏极客编程

Sass 快速入门学习

  众所周知css并不能算是一们真正意义上的“编程”语言,它本身无法未完成像其它编程语言一样的嵌套、继承、设置变量等工作。

8310
来自专栏史上最简单的Spring Cloud教程

javascript入门笔记8-window对象

History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。 注意:从窗口被打开的那一刻开始记录,...

197100
来自专栏前端小叙

jquery获取select多选框选中的值

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

go-runtime

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

15440
来自专栏java一日一条

Java 多线程同步的五种方法

因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举个例子,如果一个银行账...

21320
来自专栏九彩拼盘的叨叨叨

Promise 写法示例

上面代码中,doThing1,doThing2,doThing3 都要返回 Promise 对象。

9120
来自专栏大内老A

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

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

21050
来自专栏阿炬.NET

Less学习笔记

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

Java --- JSP2新特性

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

22390
来自专栏Seebug漏洞平台

当代 Web 的 JSON 劫持技巧

Benjamin Dumke-von der Ehe 发现了一种有趣的跨域窃取数据的方法。使用JS 代理,他能够创建一个 handler,可以窃取未定义的 Ja...

37060

扫码关注云+社区

领取腾讯云代金券