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

相关文章

来自专栏青玉伏案

iOS开发针对对Masonry下的FPS优化讨论

今天博客的内容就系统的讨论一下Masonry对FSP的影响,以及如何更好的使用Masonry。如果你对iOS开发足够熟悉的话,那么对Masonry框架应该不陌生...

2076
来自专栏开发与安全

从汇编角度来理解linux下多层函数调用堆栈运行状态

我们用下面的C代码来研究函数调用的过程。 int bar(int c, int d) {     int e = c + d;     return e; } ...

1870
来自专栏MasiMaro 的技术博文

VC++ 崩溃处理以及打印调用堆栈

一般当程序发生异常时,用户代码停止执行,并将CPU的控制权转交给操作系统,操作系统接到控制权后,将当前线程的环境保存到结构体CONTEXT中,然后查找针对此异常...

1454
来自专栏微信公众号:Java团长

从零开发一个Java Web项目要点

本文章详细的列出了开发一个传统JavaWeb项目需要注意的要点,从环境准备开始到三层架构搭建,需要注意的地方全部罗列出来。

793
来自专栏用户2442861的专栏

从汇编角度来理解linux下多层函数调用堆栈运行状态

http://blog.csdn.net/jnu_simba/article/details/25158661

782
来自专栏java学习

SSM框架原理,作用及使用方法

注:本公众号纯属个人公益公众号!不存在任何收费项目!免费分享所有学习资料!只求大家多多支持!多多关注!!

660
来自专栏爱撒谎的男孩

Spring初体验

4096
来自专栏GreenLeaves

WCF系列教程之WCF服务配置

文本参考自:http://www.cnblogs.com/wangweimutou/p/4365260.html 简介:WCF作为分布式开发的基础框架,在定义服...

1816
来自专栏Web项目聚集地

从零开发一个JavaWeb项目要点「建议收藏」

本文章详细的列出了开发一个传统JavaWeb项目需要注意的要点,从环境准备开始到三层架构搭建,需要注意的地方全部罗列出来。本文作者「张丰哲」欢迎点击阅读原文,关...

732
来自专栏张善友的专栏

WCF 4.0中的动态发现服务WS-Discovery

WCF 3/3.5 中,当我们要调用一个服务时,必须事先知道该服务的地址,然后通过服务代理用双方约定好的契约与远程的服务进行交互。现在,WCF 4.0中提供了发...

1875

扫码关注云+社区