1.第一步实现简单调用,成功调用resolve,失败调用reject,参数传入then的回调函数中。
1 | function Promise (executor) { |
测试代码1
2
3
4
5
6
7
8
9
10
11let Promise = require('./index.js')
let p = new Promise((resolve, reject) => {
resolve(100)
})
p.then((data) => {
console.log('成功', data)
}, (err) => {
console.log('失败', err)
})
2.为了防止resolve和reject被多次调用,需要保证状态唯一
1 | function Promise (executor) { |
测试代码
1 | let Promise = require('./index.js') |
3.异步处理,then回调函数的参数还没有值,状态是pending,通过发布订阅模式处理回调
1 | function Promise (executor) { |
测试代码
1 | let Promise = require('./index.js') |
处理then回调的返回值类型,递归解析处理值为普通值
1 | function Promise (executor) { |
测试代码
1 | let Promise = require('./index.js') |
处理then回调函数参数的默认值,then里面的回调都是可以不传的
1 | function Promise (executor) { |
promise类静态方法resolve和reject的原理
1 | Promise.resolve = function () { |
promise静态方法all的实现原理是计数器,应为要保证结果的顺序
1 | Promise.all = function (arrFn) { |
promise中cache方法其实就是then方法的简写
1 | Promise.prototype.catch = function (errFn) { |
finally是promise中无论状态成功还是失败都会执行的
1 | Promise.prototype.finally = function (callback) { |
promise中race的调用方式
1 | Promise.race = function (arrFn) { |