zoukankan      html  css  js  c++  java
  • promise的简单理解

    现在来总结一下对promise简单的理解吧,首先来讲讲回调地狱,

    假设我们加载1.js没问题,我们就加载2.js,加载2.js没问题,我们就加载3.js。。。。。

     1 loadScript('1.js', function(error, script) {
     2 
     3   if (error) {
     4     handleError(error);
     5   } else {
     6     // ...
     7     loadScript('2.js', function(error, script) {
     8       if (error) {
     9         handleError(error);
    10       } else {
    11         // ...
    12         loadScript('3.js', function(error, script) {
    13           if (error) {
    14             handleError(error);
    15           } else {
    16             // ...加载完所有脚本后继续 (*)
    17           }
    18         });
    19 
    20       }
    21     })
    22   }
    23 });

    如果调用嵌套的增加,代码层次变得更深,维护难度也随之增加,尤其是我们使用的是可能包含了很多循环和条件语句的真实代码,而不是例子中的 ...

    有时这些被称为“回调地狱”或“厄运金字塔”。(资料原地址:https://zh.javascript.info/callbacks),为了避免这种情况的出现,我们出现了promise,

    首先介绍一下promise

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。

    Promise对象有三种状态

    • pending: 初始状态,不是成功或失败状态。
    • fulfilled: 意味着操作成功完成。
    • rejected: 意味着操作失败。

    动态可以从pending->fulfilled 或者从pending到rejeected 且一旦改变就不可能再变

    Promise 构造函数包含一个参数和一个带有 resolve(解析)和 reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切都正常,则调用 resolve,否则调用 reject。

    1 var promise = new Promise(function(resolve, reject){
    2     // 
    3     
    4     if (/* 异步操作成功 */) {
    5         resolve(value);
    6     } else {
    7         reject(error);
    8     }
    9 })

    对于已经实例化过的 promise 对象可以调用 promise.then() 方法,传递 resolve 和 reject 方法作为回调。

    promise.then() 是 promise 最为常用的方法。

    promise.then(onFulfilled, onRejected)

    promise简化了对error的处理,上面的代码我们也可以这样写:

    promise.then(onFulfilled).catch(onRejected)

    然后我们就可以采用.then或者.catch的方式进行调用resolve代表成功,如果成功后就执行.then,reject代表失败,失败后就执行.catch

    我们来看看例子吧

    let promise = new Promise(function(resolve){
        
        resolve()
    });
    promise.then(() => console.log("执行成功"));
     
  • 相关阅读:
    微服务2:微服务全景架构
    SystemVerilog语言简介
    Slip打包与解包及MATLAB程序
    恶性卷积码
    通信原理之调制解调(2)QPSK
    FPGA仿真只适合开发定制IP的设计师?
    用CCS开发DSP应用程序的代码结构、加电装载及在线编程
    符号能量问题
    该如何选择?
    无线通信距离的计算
  • 原文地址:https://www.cnblogs.com/cookie-bubble/p/13735571.html
Copyright © 2011-2022 走看看