实用的生活知识参考!
当前位置:首页 > 我爱学习 > 英语 >关于SINCE的全部用法

关于SINCE的全部用法

  setTimeout(function() {

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

  resolve("第一个执行完毕");

  }, 500);

  })

  return result;

  }

  private secPromise(): Promise {

  let result = new Promise((resolve, reject)=> {

  setTimeout(function() {

  console.log("执行第二个Promise, 300ms");

  resolve("第二个执行完毕")

  }, 300);

  })

  return result;

  }

  private thirdPromise(): Promise {

  let result = new Promise((resolve, reject)=> {

  setTimeout(function() {

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

  resolve("第三个执行完毕")

  }, 200);

  })

  return result;

  4、reject的用法

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

  private rejectPromise(): Promise {

  let result = new Promise((resolve, reject)=> {

  let math: number = Math.floor(Math.random() .10);

  if(math >= 5) {

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

  } else {

  reject("随机数小于5");

  }

  })

  return result;

  }

  调用 rejectPromise方法

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

  (data)=> {

  console.log(data);

  },

  (data)=> {

  console.log(data);

  }

  )

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

  5、all的用法

  Promise的 all 提供并行执行异步操作的能力,并且在所有异步操作执行完毕之后才执行回调。依旧使用上面第一的三个方法,all用法如下:

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

  Promise.all([this.firPromise(), this.secPromise(), this.thirdPromise()])

  .then((datas)=> {

  console.log(datas);

  })

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

  运行结果:

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

  6、在实际开发中的用法

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

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

  let icon: egret.Bitmap = new egret.Bitmap(data);

  this.addChild(icon);

  }, this, RES.ResourceItem.TYPE_IMAGE);

  API中:

  function getResByUrl(url: string, compFunc?: Function, thisObject?: any, type?: string): Promise;

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

  private urlGetImg() {

  let result: Promise = RES.getResByUrl("resource/assets/egret_icon.png");

  result.then((data)=> {

  let icon: egret.Bitmap = new egret.Bitmap(data);

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

  this.addChild(icon);

  })

  }

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

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

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

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

  private orderTW() {

  for (let i = 0; i < 5; i++) {

  for (let j = 0; j < 5; j++) {

  let map: egret.Bitmap = new egret.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;

  }

  }

  //当前下标

  let index: number = 0;

  //执行动作的Promise

  let twPromise = () => {