Promise是一个构造函数,它有自己的方法如resolve reject all,原型有方法如then catch。
本文将重点关注以下内容:
1、使用解析和拒绝。
2.所有的用法。
3.重点是当时的使用。
本教程中使用的引擎版本:5.2.13
本教程来源链接:https://github.com/shenysun/PromiseCourse
本教程参考:
【ES6承诺用法说明】
http://www.cnblogs.com/whybxy/p/7645578.html
1、最简单的承诺
让任意_1 =新承诺((解决,拒绝)= >;{
setTimeout(()= >;{
console . log(" 1s后,开始执行");
解决(“承诺完成”)
}, 1000);
})
/**
*创建新的承诺。
* @param executor用于初始化承诺的回调。这个回调传递了两个参数:
*一个解析回调,用于解析带有值的承诺或另一个承诺的结果,
*以及拒绝回拨,用于拒绝承诺并提供原因或错误。
*/
新<。T>。(执行者:(解析:(值?:T | PromiseLike & ltT>。)= >;无效,拒绝:(原因?:any)= > gt。void) =>。无效):承诺& ltT>。;
Promise的构造函数接收一个函数的参数,这个函数有两个参数:resolve和reject,分别代表一步操作执行成功和异步执行失败后的回调函数。
运行以上代码是显而易见的。一秒钟后,将执行“1s后开始执行”,并调用解析方法。
到了这里,很多人会开始怀疑这个决议是什么,没用没执行。
2.决心的使用
上述解析和拒绝分别代表一步操作成功和异步执行失败后的回调函数。那么在Promise函数完成后,如何让这两个函数执行呢?
执行以下代码:
让任意_1 =新承诺((解决,拒绝)= >;{
setTimeout(()= >;{
console . log(" 1s后执行");
解决(“承诺完成”)
}, 1000);
})
any_1 .然后((data)= >{
console.log(数据);
})
控制台日志:
Promise对象调用then方法,然后接收一个函数参数,并获取Promise成功回调解析函数的参数。无极就是这么做的。简单来说就是可以把原来的回调编写分开,异步操作完成后通过链式调用执行回调函数。
3.连锁经营的使用
从表面上看,Promise与普通回调函数相比,可以简化逐层回调的编写。Promise的本质是“状态”,它通过维护和转移状态来及时调用回调函数。这比传递回调函数要简单和灵活得多。
让我们看一段代码:
/* *按顺序履行承诺*/
private orderGo() {
this.firPromise()。然后((数据)= gt;{
console.log(数据);
return this . secpromise();
})
。然后((数据)= gt;{
console.log(数据);
return this . third compromise();
})
。然后((数据)= gt;{
console.log(数据);
控制台日志(“三次执行完成”);
})
}
根据该序列,每隔一段时间执行一次异步回调,在下一个then方法中可以获得在firPromise方法中发送来解析的数据,并运行以下结果:
5.所有的用法
Promise的all提供了并行执行异步操作的能力,并且在所有异步操作执行完毕之前不会执行回调。仍然使用上面的前三种方法,所有的用法如下:
// -所有用法
promise . all([this . firspromise()、this.secPromise()、this.thirdPromise()])
。然后((数据)= gt;{
console.log(数据);
})
// -所有用法
运行结果:
all方法并行执行三个Promise对象,并将所有异步执行结果发送到数组中的then,即上面的数据。
6.实际开发中的使用
我们先来看看getResByUrl的使用,这是白鹭上常用的方法:
RES . getresby URl(" resource/assets/egret _ icon . png "/>
关于下面的另一个例子,请参考Nasus
创建5 * 5对象,依次异步执行一系列操作,效果如下。
下一个操作只能在这次执行完所有操作后才能开始。使用补间第三方库,源代码如下:
private orderTW() {
for(设I = 0;i <。5;i++) {
for(设j = 0;j <。5;j++) {
让地图:白鹭。位图=新白鹭。位图(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;
这个。_layer.addChild(地图);
这个。_layer.x =白鹭。main context . instance . stage . stage width/2-this。_ layer . width/2;
这个。_layer.y =白鹭。main context . instance . stage . stage height/2-this。_ layer . height/2;
}
}
//当前下标
let index:number = 0;
//执行行动的承诺
让twPromise = () = >{
Console.log (` executed ${index}次');
返回新承诺((解决1,拒绝)= >;{
白鹭。Tween.get(this。_layer.getChildAt(index))。至({
旋转:30°
}, 400).至({
旋转:-30°
}, 400).至({
alpha: 0
}, 200).呼叫(()= >;{
resolve 1(index++);
})
})
}
//切换对象的承诺
让orderPromise = () = >{
返回新承诺((解决2,拒绝)= >;{
twPromise()。然后(()= >;{
if(索引& lt这个。_ layer . NumChildren)resolve 2(OrderPromise())
Else resolve2(“执行完毕”)
})
})
}
order promise();
}
定义了两种承诺方法,即补间动画的承诺方法和执行承诺方法的订单承诺方法。orderPromise在初始时执行,这个方法将调用two promise方法,然后调用two promise的方法,其中two promise方法将调用index++。也就是说,一个对象执行了一系列的补间动画后,切换到下一个对象,然后通过resolve2(orderPromise())完成整个过程。
总结
在本教程中,我们从开始到完成一个简单的演示学习了Promise的用法。如果有兴趣,还可以学习catch race的用法。通过本教程,您可以学习以下知识点:
什么是承诺
承诺、解决和拒绝两个常用功能的使用
连锁经营的使用和所有
以上是Promise主要用法的详细说明,希望对开发者有所帮助。如果您有任何意见或建议,请留言与我们讨论。
1.《then的用法 菜鸟丨Promise的用法讲解》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《then的用法 菜鸟丨Promise的用法讲解》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1038918.html