pomise的简单用法

1、then的基本简单用法,当异步获取完数据后就会自动执行then的方法

    function runAsync1(){
        var p = new Promise(function(resolve, reject){
            //做一些异步操作
            setTimeout(function(){
                console.log('执行完成');
                resolve('随便什么数据');
            }, 3000);
        });
        return p;
    }

  renAsync1().then(function(data){
    console.log(data);//随便什么数据
  })

2、then的链式基本用法,一个一个触发

    runAsync1().then(function(data){
        console.log(data);//随便什么数据1
        return runAsync2();
    }).then(function(data){
        console.log(data);//随便什么数据2
    })

3、提供两种数据传递方式resolve(),和reject()(注意两者一次只能触发其一)

function getNumber(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            var num = Math.ceil(Math.random()*10); //生成1-10的随机数
            if(num<=5){
                resolve(num);
            }
            else{
                reject('数字太大了');
            }
        }, 2000);
    });
    return p;            
}

getNumber()
.then(
    function(data){
        console.log('resolved');
        console.log(data);
    }, 
    function(reason, data){
        console.log('rejected');
        console.log(reason);
    }
);

4、当发生错误时触发的catch

getNumber()
.then(function(data){
    console.log('resolved');
    console.log(data);
    console.log(somedata); //此处的somedata未定义
})
.catch(function(reason){
    console.log('rejected');
    console.log(reason);
});

5、全部同时执行的all(全部执行完成才输出数据,且数据也是数组格式)

Promise
.all([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
    console.log(results);
});

6、谁快先执行谁的race

Promise
.race([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
    console.log(results);
});
原文地址:https://www.cnblogs.com/huangqiming/p/6844546.html