Javascript----Promise初步探究
来源:互联网 发布:淘宝抢红包微信群 编辑:程序博客网 时间:2024/06/06 05:15
最近大概研究了javascript的Promise的用法之后,参照mdn,做出一些很浅显的总结
- 构造器
new Promise(function(resolve, reject) {});
- Promise的构造器有一个参数,这个参数是一个函数,暂且叫他做函数A。
- 函数A有两个参数,分别是resolve,和rejected,而这两个参数也都是函数,而javascript对于函数参数并没有像c++一样严格的要求,所以尽管形参有两个,但实参可以有一个或两个甚至0个。
- resolve和rejected都是只有一个参数的函数,分别对应Promise的成功消息的失败消息
下面给出一段示例
var p = new Promise(function(resolve/*,rejected//可以根据需要选择*/){ if(doSomethingAsync()) resolve('成功的消息'); /*else rejected('失败的消息');*/})
- then方法
定义了Promise对象之后,就可以使用Promise的then方法。
then方法原型
Promise.then(onFulfilled,onRejected)
- then方法有两个参数,并且都是函数,两个函数都是以on开头,是不是类似于onClick之类的属性?对的,这也是一个类似于处理事件的函数,处理的是成功和失败的消息。
- onFulfilled函数在与resolve的参数是相同的,大概可以看作resolve会把参数传送给onFulfilled的参数,所以resolve的实参就是onFulfilled的参数。onRejected与之类似。
代码示例
var p = new Promise( function(resolve,rejected) { resolve('message'); console.log('after resolve') });p.then( function(v1) { console.log(v1+' resolving') }, function(v2) { console.log(v2+' rejected');//onRejected部分,没有被调用 }) //结果: //after resolve //message resolving
与then方法类似的还有catch方法
- 方法链
Promise的then和catch函数还支持方法链。因为then在一些时候会返回一个Promise对象- 如果在then的参数的两个函数中没有显式的返回Promise对象,而返回了其他值,这个返回值会被再次传递给下一个then方法,相当于重新调用了一次resolve方法传送参数
var p = new Promise(function(resolve,rejected) {resolve(1)});p.then(function(val){ return 3 }).then(function(val){ console.log(val);})//结果://3
- 如果then的参数的两个函数显式的返回了新的Promise对象,后面的then或catch对象都会是新的Promise对象
var p = new Promise(function(resolve,rejected) {resolve(1)});p.then(function(val){ return new Promise(function(resolve){ resolve(2); }).then(function(val){ console.log(val);})//结果://2
阅读全文
0 0
- Javascript----Promise初步探究
- Promise对象探究
- AngularJs 之 Promise 探究
- JavaScript Promise
- javascript promise
- javascript: Promise
- Javascript Promise
- JavaScript Promise
- JavaScript promise 链,并行promise
- JavaScript Promise 简化javascript
- jQuery 原理初步探究
- MassTransit 探究初步
- boost bind初步探究
- xvfb 初步探究
- MassTransit 探究初步
- GridLayout 初步探究
- AndroLua, Luajava初步探究
- jQuery 原理初步探究
- CentOS 7系统中安装AutoDock Vina
- 你好,
- spring mvc 数据绑定问题 提交表单提示HTTP status 400, The request sent by the client was syntactically incorrect
- 通过x-shell向云服务器上传文件
- spring学习--总结IOC(控制反转)
- Javascript----Promise初步探究
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解
- leetcode No124. Binary Tree Maximum Path Sum
- C语言读写SQLite数据库
- centOS7下redis3.0安装以及布置集群教程(单机创建多个实例调试)
- Android开发中的五大布局
- log4j日志记录配置的小结
- POJ 1972 Dice Stacking 笔记
- Vim插件之Conque GDB