摘抄 Promise原理

Posted 诗酒明月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了摘抄 Promise原理相关的知识,希望对你有一定的参考价值。

1、简单的promise:

        //极简promise雏形
        function Promise(fn){
            var value = null;
            callbacks = [];//callback为数组,因为可以同时有很多个回调
            this.then = function(onFulfilled){
                callbacks.push(onFulfilled);
            }
            function resolve(value){
                callbacks.forEach(function(callback){
                    callback(value);
                });
            }
            fn(resolve);
        }

上面:

1、调用then方法,将想要在Promise异步操作成功时执行的回调放入callbacks队列,其实也就是注册回调函数。

2、创建Promise实例时传入的函数会被赋予一个函数类型的参数,即resolve,它接收一个参数value,代表异步操作返回的结果,当一步操作执行成功后,用户会调用resolve方法,这时候其实真正执行的操作是将callbacks队列的回调一一执行。

 

        //链式
        this.then=function(onFulfilled){
            callbacks.push(onFulfilled);
            return this;
        }
        //改造resolve函数保证异步执行
        function resolve(value){
            setTimeout(function(){
                callbacks.forEach(function (callback){
                    callback(value);
                },0);
            })
        }
        //状态 pending fulfilled
        function Promise(fn){
            var state ="pending";
            value = null;
            callbacks=[];
            
            this.then = function(onFulfilled){
                if(state === ‘pending‘){
                    callbacks.push(onFulfilled);
                    return this;
                }
            };
            function resolve(newValue){
                value = newValue;
                state = ‘fulfilled‘;
                setTimeout(function(){
                    callbacks.forEach(function(callback){
                        callback(value);
                    });
                },0);
            }
            fn(resolve);
        }

 

以上是关于摘抄 Promise原理的主要内容,如果未能解决你的问题,请参考以下文章

Promise简单实现--摘抄

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

ES6 Promise的用法(摘抄)

前端面试题之手写promise

promise实现原理代码