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("执行成功"));

 

 
posted @ 2020-09-26 16:40  Cookie饼干  阅读(236)  评论(1编辑  收藏  举报