Promise使用笔记~~


至从ES6(ES2015)正式规范之后,Promise收到高度重视,一直没时间小结一波,今儿抽空整理下好东西Promise!


基本所有浏览器都支持Promise,所以放心大胆使用!

首先,控制台先打印下Promise是什么东西,如下图所示:

Promise其实是一个构造函数,里面包含了很多行为方法(race,reject,resolve等),在prototype原型上then、catch等回调方法!

使用场景类似APAB前台Model操作交互:

var oModel = new sap.ui.model.odata.ODataModel(
	"/sap/opu/odata/SAP/ZGS_ZICERP_F4_SRV/", {
	json : true,
	loadMetadataAsync : true
	});
	oModel.attachMetadataLoaded(function(e){
	var path = "/Help_ECUserSet('1')"
	oModel.read( path,
	{
	sPath : path,
	context : this,
	success : function(oData,response) {
								abc(oData);
	},
	error : function(oError) { 
	ZICERP_F4.js.publicFunction.onError(oError);
	},
	async : true
	}); 
},this);

Model的异步请求交互之后有success和error两个回调,执行成功之后走success,失败error。业内有句话:“程序员是上帝,给业务流程指定了人生轨迹”,个人觉得恰到好处!

由于Javascript执行是单线程的,那么复杂的业务场景中就不无避免会遇到回调。Promise就是适用于回调的业务场景之中,虽然我们可以借助非它进行回调,弊端在于多层回调的时候,代码会变得非常冗余。

Promise的链式调用(函数的执行依赖于上一个函数执行结果)的方式来执行回调函数给予了我们很大便利,上代码:

new Promise(function(resolve, reject) {//等待(pending)、已完成(fulfilled)、已拒绝(rejected)

                resolve(10);//new一个Promise对象

            })

            .then(function(num) { console.log('第一个:', num); return num * 2; })

            .then(function(num) { console.log('第二个:', num); return num * 2; })

            .then(function(num) { console.log('第三个: ',num);})
            .catch(function(){});
执行结果:

更多的应用场景是包在一个具体的执行函数中实例化一个Promise对象,针对函数运行结果进行规划then函数走向:

function f1(){
                try{
                    var p=new Promise(function(resolve,reject){
                        var num = Math.round(Math.random()*10);//取0到10的随机整数
                        if(num <= 5){
                            //指定resolve状态
                            resolve(num);
                        }else{
                            //指定reject状态
                            reject(num);
                        }
                    });
                    return p;
                }catch(err){
                  console.log(err.message);
                }
              }
              
              
              f1().then(function(data){
                //resolve
                console.log(data + ":为resolve")
              },function(res,data){
                //reject
                console.log(res + ": 数值大于5为reject")
              });

执行结果:

程序指定生成的随机整数大于5的时候指定promise状态为reject,小于5的时候为resolve状态;当然多层次的回调继续在f1().then().then().then().............;


Promise的内容就这些吗?当然不是啦,这么牜的东西肯定还有很多内容的,race、finally、all、catch以及前端工程师都玩过的Jquery里Promise等等,这些在实际项目中还未玩过,所以笔记后面继续完善!不用不知道,一用就知道!水平有限,欢迎交流指正~~~~最后祝:工作顺利微笑

猜你喜欢

转载自blog.csdn.net/ime33/article/details/79368880