Promise胡思乱想(一)
来源:互联网 发布:化学软件初中 编辑:程序博客网 时间:2024/05/16 07:19
我们先看Promise的一个例子吧。下面代码摘自http://www.cnblogs.com/wangfupeng1988/p/6515855.html
wait = function (){promise = new Promise( function(resolve, reject){task = function(){console.log("执行完成")resolve() }setTimeout( task,2000 ) }) return promise}var w = wait()w.then( function(){console.log('ok 1')}, function(){console.log('err 1')} ).then ( function(){console.log('ok 2')}, function(){console.log('err 2')} )上面代码输出
先说明下上面代码运行过程再讨论Promise。
调用wait(...)函数, 因为setTimeout浏览器某模块开始计时,之后生成了一个promise对象,返回prmoise对象给w.再之后定时器计时结束调用task函数(回调)。
在调用task函数时由于Prmoise中的resolve()被执行了故执行w.then( 函数1,函数2 )中的第一个函数,接着又执行了下一个then()函数的第一个函数。
对于前面定时器那块执行顺序,可以写个输出查看
下面说明下Promise,Promise经常与new一起使用以建立对象,并且必须提供一个函数回调,我们把它取名叫foo()吧。这个回调是同步的或者立即调用的
(在上图中的输出也能看Promise( )中的回调是立即调用的),通常foo( )接收两个回调函数,称为resolve( )和reject( )。
Promise对象有个then()方法,这个方法也有两个参数。分别对应着resolve()被调用时和reject()被调用这两种情况。
当第一个参数resolve()被调用时,Promise对象的then()方法里的第一个方法立即被调用。因此上面的代码中执行了console.log('ok 1')。
那为什么又执行了console.log('ok 2')呢。因为这是Promise的链式调用, Promise 的链式调用。也就是promise().then().then().。。。。。
链式调用内容其实很多的。比如这个链如何终止?
Promise内容还有很多,比如如果传给resolve()的是一个非Promised,非thenable的立即值,这个promise就会立即用这个值完成,否则这个这个值会被递归的展开。
上面的内容仅仅是Promise()的初步扫盲。
- Promise胡思乱想(一)
- 胡思乱想(一)
- Promise学习记录(一)
- JavaScript Promise 实现(一)
- js之promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- Promise学习笔记(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 大白话讲解Promise(一)
- 胡思乱想
- 胡思乱想
- python学习笔记之008.py
- python中将汉字转换为拼音的库xpinyin
- angular实现input输入监听
- 六:使用码云
- python学习笔记之009.py
- Promise胡思乱想(一)
- 跨计算机、跨平台、跨语言对象表示格式JSON必火
- jquery php json cookie ajax 解决跨域的问题
- python学习笔记之010.py
- jq:对下拉框select的操作的总结
- Linux常用命令-Shell技巧及其他
- IO流(一)概述
- python学习笔记之011.py
- mysql 如何用一个表的字段填充另一个表