对Promise的一些小尝试

本文通过实例演示如何利用Promise简化多个Ajax请求的处理流程。通过Promise.all实现并发请求的统一管理,并展示了错误处理及后续操作的链式调用。

有时候需要同时处理多个ajax返回的值,只好把几个ajax写在回调里面,变得臃肿不堪,自己试了下promise的写法。

/**
/**
 * Created by kasol
 */
function test(resolve,reject){
    var num=Math.random()*5;
    console.log("test任务要延时 "+num+"秒");
    setTimeout(function () {
        if(num<2.5){
            resolve(num);
        }else{
            reject("test任务出错了!");
        }
    },num*1000);
}
function bar(resolve,reject){
    var num=Math.random()*10;
    console.log("bar任务要延时 "+num+"秒");
    setTimeout(function () {
        resolve(num);
    },num*1000)
}

function foo(resolve,reject){
    var xhr;
    if(XMLHttpRequest)
    xhr=new XMLHttpRequest();
    else{
        xhr=new ActiveXObject('Microsoft.XMLHTTP');
    }
    xhr.onreadystatechange= function () {
        if(xhr.readyState===4){
             if(xhr.status===200){
                 var jsondata=JSON.parse(xhr.responseText);
                    resolve( jsondata);//jsondata格式{"name":"Kasol","age":23,"skill":["html","css","js","as","php","mysql"]}
             }else{
                 console.log("error code is"+xhr.status);
                 reject("foo任务没有得到正确相应");
             }
        }else{

        }
    };
    xhr.open("get","http://localhost:8081/GZLT/index.php");
    xhr.send();

}
function add(input){
    var sum=input+input;
    return new Promise(function(resolve,reject){
        console.log(input+"+"+input+"="+sum);
          resolve(sum);
    });
}

function  mul(input){
    var m=input*input;
    return new Promise(function(resolve,reject){
        console.log(input+"*"+input+"="+m);
        resolve(m);
    });

}
var p1=new Promise(test);
var p2=new Promise(bar);
var p3=new Promise(foo);
//Promise.all([p1,p2]).then(function (result) {// 这里的all改成race,则变成抢占式
//    console.log(result);
//    //这个result是一个数组,包含了来自两个promise的反馈信息
//}).catch(function (reason) {
//   console.log(reason);
//});

/*p1.then(function (result) {
 console.log(result);
 }).catch(function (reason) {
 console.log(reason);
 });*/
Promise.all([p1,p2,p3]).then(function (result) {//三个任务
    var pSum=result[0]+result[1]+result[2].age;
    console.log(pSum);
    return new Promise(function(resolve,reject){
        resolve(pSum);
    });
}).then(add)
.then(mul)
.catch(function(reason){
        console.log(reason);
    });




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值