想更深层次学习promise,先解读Promise/A+标准,根据标准实现不失为是个好的办法。

一个简单的promise使用例子

1
2
3
4
5
6
7
function getList() {
new Promise(function(resolve) {
setTimeout(function() {
resolve(1)
}, 1000)
})
}

new一个Promise对象时,会在其中传入一个参数函数,实例化的过程中,会调用该函数。promise函数有个实例方法then,以及私有方法resolve

1
2
3
4
5
6
7
8
9
10
11
12
function Promise(fn) {
var callback = null
this.then = function(cb){
callback = cb
}
function resolve(value) {
setTimeout(function() {
callback(value)
}, 0)
}
fn(resolve)
}

resolve函数中,将callback推迟到下一个事件循环中执行,其原因那是因为,promise实例化时,this.then还没执行,callback为null,导致报错。