美文网首页
ES6 Primise异步编程

ES6 Primise异步编程

作者: 张先觉 | 来源:发表于2019-10-12 15:36 被阅读0次

异步操作流程化的手段

#Promise处理异步操作

Promise,使异步操作变得流程化的手段之一,例如“异步A ——> 异步B ——> 异步C……”,Promise执行器执行完异步A之后,得到一个正确resolve(或者失败reject)的结果,然后,再执行异步B,如此类推下去。

  • 了解Promise执行顺序同步执行器executor、异步then()、Promise三种状态(pending、resolve、reject)

其一,了解Promise的基本结构、以及执行顺序,代码如下:

// excutor执行器    同步
let promise = new Promise((resolve, reject) => {
    console.log("1:excutor执行器同步执行(同步)");
    if(true) {
        resolve("4: Transfer success")
    }else {
        reject("4: Transfer fail")
    }
});

// then(resolvecallback,rejectcallback)   异步
promise.then((res) => {
    console.log("3: 从上往下执行");
    console.log(res);
    console.log("5: 从上往下执行(最后)");
},(err)=>{
    console.log("3: 从上往下执行");
    console.log(err);
    console.log("5: 从上往下执行(最后)");
});

console.log("2: 我不想最后执行(同步)");

Promise从零开始实现

  • Promise主体框架:状态state执行器executor执行函数和回调函数
function Promise(executor) {
    // 初始化state为等待
    this.state = 'pending';
    // 成功的值
    this.value = undefined;
    // 失败的原因
    this.reason = undefined;
    // fn1存放 resolve 的回调
    this.fn1 = [];
    // fn2存放 reject 的回调
    this.fn2 = [];
    // 成功
    let resolve = () => {};
    // 失败
    let reject = () => {};
    // 立即执行
    executor(resolve, reject)
}

  • 完善resolvereject函数,以及executor捕捉错误

执行resolvereject函数时,需要判断state是否为等待

function Promise(executor) {
    // 初始化state为等待
    this.state = 'pending';
    // 成功的值
    this.value = undefined;
    // 失败的原因
    this.reason = undefined;
    // fn1存放 resolve 的回调
    this.fn1 = [];
    // fn2存放 reject 的回调
    this.fn2 = [];
    // 成功
    let resolve = value => {
        if('pending' === this.state) {
            this.state = 'resolved',
            this.value = value;
        }
    };
    // 失败
    let reject = err => {
        if('pending' === this.state) {
            this.state = 'rejected',
            this.reason = err;
        }
    };
    // 立即执行
    // 如果executor执行报错,那么,直接执行reject
    try{
        executor(resolve, reject)
    }catch(err) {
        reject(err)
    }
}

相关文章

  • ES6 Primise异步编程

    异步操作流程化的手段 #Promise处理异步操作 Promise,使异步操作变得流程化的手段之一,例如“异步A ...

  • JavaScript 异步编程

    同步模式与异步模式 时间循环与消息队列 异步编程的几种方式 Primise异步方案 宏任务 /微任务队列 Ge...

  • ES6文章合集

    一、深入理解ES6异步编程 JavaScript 的单线程,如果没有异步编程的话将会苦不堪言。ES6 之前,异步编...

  • 【ECMAScript6】 Promise

    Promise 是什么 Promise 是 ES6 为 JavaScript 异步编程定义的全新 api 。为异步...

  • 重读 ES6 - async+await 同步/异步方案

    异步编程一直是JavaScript 编程的重大事项。关于异步方案, ES6 先是出现了 基于状态管理的 Promi...

  • ES6 Promise 异步编程方案

    为什么使用 Promise ? Promise 是 ES6 提出的异步编程方案 ! ES6 之前,如果我们都是通过...

  • Promise 就是这么简单

    Promise 是干嘛的? Promise是ES6针对js异步编程一种解决方案,也解决了ES5之前异步编程大量回调...

  • ES6异步函数sync

    es6新增的sync是用来解决异步编程的函数,最常见的异步编程就ajax请求,一般开发中都会遇到一个场景,就是封装...

  • 浅谈promise的用法

    promise 是es6中新增的一个对象 是异步编程的解决方案,主要解决异步编程中多个回调函数的使用问题 在实际...

  • [ES6] Promise

    Promise Promise是ES6提出解决异步编程的方案,相比于传统的回调函数,Promise更符合人们的编程...

网友评论

      本文标题:ES6 Primise异步编程

      本文链接:https://www.haomeiwen.com/subject/svwqmctx.html