Promise胡思乱想(一)

我们先看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()的初步扫盲。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值