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点半

    浏览器F12,Network中各按钮的作用
    postman收藏 -大佬玩法。
    Windows日常快捷键
    认识jmeter(一)
    web测试:test过程中接口报错 "Object reference not set to an instance of an object."
    postman-error:SyntaxError: Invalid shorthand property initializer
    mysql 表结构及基本操作
    getinstance方法(转)
  • 原文地址:https://www.cnblogs.com/cookie-bubble/p/13735571.html
Copyright © 2011-2022 走看看