zoukankan      html  css  js  c++  java
  • ES6浅谈之Promise

    ES6浅谈之Promise

     

    首先来回想一下Promise对象的写法:

    复制代码
    // 方法1
    let promise = new Promise ( (resolve, reject) => {
        if ( success ) {
    ... resolve(a); // pending ——> resolved 参数将传递给对应的回调方法 } else {
    ... reject(err); // pending ——> rejected } } ) // 方法2 function promise () { return new Promise ( function (resolve, reject) { if ( success ) {
    ... resolve(a); } else {
    ... reject(err); } } ) }
    复制代码

    ①Promise对象有三种状态:pending、resolved、rejected。

    ②并且Promise对象在实例化之后内部代码会立即执行,并且会由pending状态转化为其余两种状态。

    ③这些立即执行的代码与外部代码是同步的,即:按先后顺序依次执行(js的单线程特性)

    复制代码
    var b ;
    function a(){
        b = new Promise(function(resolve, reject){
            console.log('over');
            resolve('over');
        });
    }
    a();
    b.then(n=>console.log(n));
    console.log("begin-----");
    复制代码

    a()函数的执行,为b变量进行了初始化操作,使得b成为了一个Promise对象;

    于是这个Promise对象(b)内部的代码会立即执行---console.log('over'),并获得resolved状态;

    接下来执行b(Promise对象)的then方法,由于

    ④then方法内部回调是异步的,所以等待其余同步代码先执行;

    console.log("begin-----");这是一个同步操作,会紧接着上一个同步代码(console.log('over'))执行;

    最终,虽然Promise对象的then方法排在第二步,由于它是异步的,导致内部回调函数最后执行;

    控制台依次输出:over;begin-----;over。

    既然前面说到Promise对象在实例化之后可能获得两个不同状态,那么自然对这两个状态都有不同的方式去处理;

    ⑤then(success(),error()),针对不同状态进行不同处理,即两个不同的回调函数,并将获得状态时的函数参数传递到回调函数里

    ⑥catch(error),用于处理rejected状态传递出来的error对象,所以通常then()不用写error()回调,直接由catch来捕获错误,

    并且还可以捕获上面success()回调产生的错误。

    待续。。。

    (我不怕千万人阻挡,只怕自己投降!)
     
     
  • 相关阅读:
    关于typedef在struct使用上的一些问题
    软件工程--趣盒--第四次团队作业--软件实现与测试
    趣盒——快速入门手册
    软件工程趣盒软件设计
    软件工程项目需求分析
    在VS2017下配置OpenGL
    破阵子青铜团队介绍以及项目背景介绍
    海客谈瀛洲,烟涛微茫信难求——微信
    第一次作业:扑通扑通 我的IT
    5.线性回归算法
  • 原文地址:https://www.cnblogs.com/onesea/p/13048003.html
Copyright © 2011-2022 走看看