promise函数

一、promise的初衷:


          1、实现异步操作

          2、解决回调地狱

           promise是一个构造函数,自身有reject、resolve、race方法,原型链上有then、catch方法。用new出来一个promise对象会自带这些方法。

            1、它被设计成一个全局构造函数

            2 、这个函数创建出来的对象 是一个特殊的数据容器

            3、这个数据容器内部有三种状态: 等待 ==>产生的正确数据  产生了错误的数据

            4、创建对象时要求传一个函数参数==>也就是在这个函数中处理耗时业务,一般用法:
 

new Promise((resolve,reject)=>{resolve(),reject()}) 

二、promise函数中的then和catch方法

       初始状态:pendding  ---> 成功状态:fulfilled  调用resolve

       初始状态:pendding  ---> 失败状态:rejected   调用reject

promise对象.then(function(res){}):执行成功

              第一个then方法中的回调函数中的res代表成功或者失败(resolve、reject)函数的参数值

              promise对象.catch(function(err){}):执行失败

              then方法中的res参数是上个then方法的返回值
 

  let pro1 = new Promise(function(resolve, reject) {
            // resolve  成功
            // reject   失败
            if (1) {
                // resolve("成功啦!");
                resolve(2);
            } else {
                reject("失败啦!");
            }
        })
 
    pro1.then(res => {
            console.log(res);
            return "我是第一个then方法的返回值"
        })
        .then(res => {
            console.log(res);
            return "我是第二个then方法的返回值"
        })
        .then(res => {
            console.log(res);
        })
        .catch(err => {
            console.log(err);
        })
    console.log(3);

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,关于手写实现Promise函数,其实Promise是一种异步编程的解决方案,它的本质是对回调函数的封装,可以更加优雅和简洁地处理异步操作。以下是一个简单的手写Promise函数示例: ```javascript function MyPromise(fn) { var self = this; self.status = 'pending'; self.value = null; self.reason = null; self.onFulfilledCallbacks = []; self.onRejectedCallbacks = []; function resolve(value) { if (self.status === 'pending') { self.status = 'fulfilled'; self.value = value; self.onFulfilledCallbacks.forEach(function(callback) { callback(self.value); }); } } function reject(reason) { if (self.status === 'pending') { self.status = 'rejected'; self.reason = reason; self.onRejectedCallbacks.forEach(function(callback) { callback(self.reason); }); } } try { fn(resolve, reject); } catch (e) { reject(e); } } MyPromise.prototype.then = function(onFulfilled, onRejected) { var self = this; return new MyPromise(function(resolve, reject) { if (self.status === 'fulfilled') { try { var x = onFulfilled(self.value); resolve(x); } catch (e) { reject(e); } } else if (self.status === 'rejected') { try { var x = onRejected(self.reason); resolve(x); } catch (e) { reject(e); } } else if (self.status === 'pending') { self.onFulfilledCallbacks.push(function(value) { try { var x = onFulfilled(value); resolve(x); } catch (e) { reject(e); } }); self.onRejectedCallbacks.push(function(reason) { try { var x = onRejected(reason); resolve(x); } catch (e) { reject(e); } }); } }); } ``` 以上就是一个简单的手写Promise函数的实现,它是基于回调函数的封装实现的异步编程方案。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值