关于SINCE的全部用法_第1页
关于SINCE的全部用法_第2页
关于SINCE的全部用法_第3页
关于SINCE的全部用法_第4页
关于SINCE的全部用法_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于SINCE的全部用法关于SINCE的全部用法精选

SINCE这个单词在英语中也是特别重要的,关于SINCE的全部用法,你知道哪些?快来一起学习吧。下面我就和大家共享,来观赏一下吧。

Promise的用法讲解

Promise是一个构造函数,其自身有resolverejectall等方法,原型上有thencatch等方法。

http://.cnblogs./whybxy/p/7645578.html

1、最简洁的Promise

letany_1=newPromise((resolve,reject)={

setTimeout(()={

console.log(经过1s,开头执行);

resolve(Promise执行完毕)

},1000);

})

/.

.CreatesanewPromise.

.@paramexecutorAcallbackusedtoinitializethepromise.Thiscallbackispassedtwoarguments:

.aresolvecallbackusedresolvethepromisewithavalueortheresultofanotherpromise,

.andarejectcallbackusedtorejectthepromisewithaprovidedreasonorerror.

.

new(executor:(resolve:(value?:T|PromiseLike)=void,reject:(reason?:any)=void)=void):Promise;

Promise的构造函数接收一个函数的参数,此函数有两个参数:resolve,reject,分别表示一步操作执行胜利和异步执行失败的后的回调函数。

运行上面代码显而易见,一秒后会执行“经过1s,开头执行”,并调用resolve方法。

到了这里会有许多人开头疑问,这个resolve是什么,也并没有用,并没有执行。

2、resolve的使用

上文提到resolve,reject,分别表示一步操作执行胜利和异步执行失败的后的回调函数。那么Promise函数完毕之后如何让这两个函数执行呢?

执行下面代码:

letany_1=newPromise((resolve,reject)={

setTimeout(()={

console.log(1s后执行);

resolve(Promise执行完毕)

},1000);

})

any_1.then((data)={

console.log(data);

})

掌握台LOG:

Promise对象调用then方法,then接收一个函数参数,并且会拿到Promise执行胜利回调resolve函数的参数。这即是Promise的作用了。简洁来讲,就是能把原来的回调写法分别出来,在异步操作执行完后,用链式调用的方式执行回调函数。

3、链式操作的用法

Promise相对于一般的回调函数(callback)来说从从表面上来说可以简化层层回调的写法,Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够准时调用,它比传递callback函数要简洁、敏捷的多。

下面看一段代码:

/.挨次执行Promise.

privateorderGo(){

this.firPromise().then((data)={

console.log(data);

returnthis.secPromise();

})

.then((data)={

console.log(data);

returnthis.thirdPromise();

})

.then((data)={

console.log(data);

console.log(三个执行完毕);

})

}

根据挨次,每隔一段时间执行一个异步回调,在firPromise方法中传给resolve的数据,可以再接下来的then方法中拿到,下面运行结果:

firPromisesecPromisethirdPromise三个方法的定义如下:

privatefirPromise():Promise{

letresult=newPromise((resolve,reject)={

setTimeout(function(){

console.log(执行第一个Promise,500ms);

resolve(第一个执行完毕);

},500);

})

returnresult;

}

privatesecPromise():Promise{

letresult=newPromise((resolve,reject)={

setTimeout(function(){

console.log(执行其次个Promise,300ms);

resolve(其次个执行完毕)

},300);

})

returnresult;

}

privatethirdPromise():Promise{

letresult=newPromise((resolve,reject)={

setTimeout(function(){

console.log(执行第三个Promise,200ms);

resolve(第三个执行完毕)

},200);

})

returnresult;

4、reject的用法

到这里大家应当对Promise有了也许的认知,前面笔者只介绍了resolve的用法,还没有介绍reject的用法,下面通过一个简洁的例子来捕获失败的回调:

privaterejectPromise():Promise{

letresult=newPromise((resolve,reject)={

letmath:number=Math.floor(Math.random().10);

if(math=5){

resolve(随机数大于5:+math);

}else{

reject(随机数小于5);

}

})

returnresult;

}

调用rejectPromise方法

this.rejectPromise().then(//reject的用法

(data)={

console.log(data);

},

(data)={

console.log(data);

}

)

上面这段代码,随机数假如大于5代表胜利了,反而代表失败了执行reject方法,运行结果有两种:

5、all的用法

Promise的all供应并行执行异步操作的力量,并且在全部异步操作执行完毕之后才执行回调。照旧使用上面第一的三个方法,all用法如下:

//-------------all用法---------------

Promise.all()

.then((datas)={

console.log(datas);

})

//-------------all用法---------------

运行结果:

all方法并行执行三个Promise对象,并把全部异步执行的结果放进一个数组中传递给then,就是上面的datas。

6、在实际开发中的用法

先看一个在Egret上常用的方法getResByUrl的使用:

RES.getResByUrl(resource/assets/egret_icon.png,(data)={

leticon:egret.Bitmap=newegret.Bitmap(data);

this.addChild(icon);

},this,RES.ResourceItem.TYPE_IMAGE);

API中:

functiongetResByUrl(url:string,pFunc?:Function,thisObject?:any,type?:string):Promise;

可以看到getResByUrl加载一个路径的图片资源,加载完成后执行Func回调函数,通过回调函数加载此图片资源,显示出来。我们可以拆分一下这个步骤,如下:

privateurlGetImg(){

letresult:Promise=RES.getResByUrl(resource/assets/egret_icon.png);

result.then((data)={

leticon:egret.Bitmap=newegret.Bitmap(data);

icon.x=egret.MainContext.instance.stage.stageWidth-icon.width;

this.addChild(icon);

})

}

二者结果相同,都可以通过路径把图片加载出来。

下面另外一个例子,参考Nasus

创建5.5个对象,异步依次执行一系列操作,效果如下图。

本次全部行为执行完毕之后,才可以进入下一次操作。使用到tween第三方库,源码如下:

privateorderTW(){

for(leti=0;i5;i++){

for(letj=0;j5;j++){

letmap:egret.Bitmap=newegret.Bitmap(RES.getRes(egret_icon_png));

map.anchorOffsetX=map.width/2;

map.anchorOffsetY=map.height/2;

map.x=map.width.j;

map.y=map.height.i;

this._layer.addChild(map);

this._layer.x=egret.MainContext.instance.stage.stageWidth/2-this._layer.width/2;

this._layer.y=egret.MainContext.instance.stage.stageHeight/2-this._layer.height/2;

}

}

//当前下标

letindex:number=0;

//执行动作的Promise

lettwPromise=()={

console.log(`执行${index}次`);

returnnewPromise((resolve1,reject)={

egret.Tween.get(this._layer.getChildAt(index)).to({

rotation:30

},400).to({

rotation:-30

},400).to({

alpha:0

},200).call(()={

resolve1(index++);

})

})

}

//切换对象的Promise

letorderPromise=()={

returnnewPromise((resolve2,reject)={

twPromise().then(()={

if(indexthis._layer.numChildren)resolve2(orderPromise())

elseresolve2(执行完毕)

})

})

}

orderPromise();

}

定义两个Promise方法,分别为tween动画的twPromise和执行twPromise方法的orderPromise方法,orderPromise在初始的时候执行,执行此方法会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论