手写Promise中级版
搭建基本结构
lib/Promise.js
/**
*
* 自定义Promise函数模块
*/
(function (window){
function Promise(executor){
}
/**
* Promise原型对象的then()
* 指定成功和失败的回调函数
* 返回一个新的Promise对象
*/
Promise.prototype.then = function(onResolved,onRejected){
}
/**
* Promise原型对象的catch()
* 指定失败的回调函数
* 返回一个新的Promise对象
*/
Promise.prototype.catch = function(onRejected){
}
/**
* Promise函数对象的resolve方法
* 返回一个成功的Promise
*
*/
Promise.resolve = function(value){
}
/**
* Promise函数的reject方法
* 返回一个指定reason的失败的promise
*/
Promise.reject = function(reason){
}
/**
* Promsie函数对象all方法
* 返回一个promise,只有当所有promise都成功时才成功,否则只要有一个失败就失败
*/
Promise.all = function(promises){
}
/**
* Promise函数对象的race方法
* 返回一个promise,其结果有第一个完成的promise决定
*/
Promise.race = function(promises){
}
//向外暴露Promsie函数
window.Promise = Promise
})(window)
在index.html引入
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="./lib/Promise.js"></script>
<script>
new Promise((resolve,reject)=>{
})
</script>
</body>
</html>
实现Promise构造函数
定义resolve与reject
(function (window){
function Promise(executor){
//定义resolve与reject函数
function resolve(value){
}
function reject(reason){
}
//立即同步执行 执行器
executor(resolve,reject)
}
...
Promise构造函数接收一个执行,我们要在内部同步执行执行器
如
<script>
new Promise((resolve,reject)=>{
resolve(1)
})
</script>
...
//立即同步执行 执行器
executor(resolve,reject)
...