今天看啥  ›  专栏  ›  无限循环无限

Promise回顾(一)

无限循环无限  · 掘金  ·  · 2021-01-29 17:30
阅读 86

Promise回顾(一)

pomise 是什么

  • 异步编程 的一种解决方案,比传统的方案(回调函数和事件)更加的合理和强大
  • 好处 异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数
  • promise可以解决异步的问题,本身不能说promise是异步的

以同步的方式去管理异步

pomise 使用

创造Promise实例时,必须传入一个函数作为参数

new Promise(() => {});
new Promise(); // 报错
复制代码

pomise 参数函数解析

该函数可以接收另外两个由JavaScript引擎提供的函数,resolve和reject。

函数作用:
  • resolve——将Promise对象的状态从pending变为resolved,将异步操作的结果,作为参数传递出去
  • reject——将Promise对象的状态从pending变为rejected,将异步操作报出的错误,作为参数传递出去
let promise = new Promise((resolve, reject) => {
  // do something
  if (true) {
    // 将参数返回,供then方法使用
    resolve("value");
  } else {
    // 将参数返回,供then方法使用
    reject("error");
  }
});
复制代码

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

promise.then(
  value => {
    // resolved时调用,value为resolve函数返回的参数
    console.log(value);
  },
  err => {
    // rejected时调用,err为reject函数返回的参数
    console.log(err);
  }
);

复制代码

当then方法只有一个函数参数时,此时为resolved状态的回调方法

promise.then(value => {
    // 只有状态为resolved时才能调用,如果返回的是rejected状态,则报错 Uncaught (in promise) error
    console.log(value);
  });
复制代码

只有当promise的状态变为resolved或者rejected时,then方法才会被调用

Promise 新建后就会立即执行,并且调用resolve或reject后不会终结 Promise的参数函数的执行。

let promise = new Promise(function(resolve) {
  console.log("Promise");
  resolve();
  console.log("!!!")
});

promise.then(function() {
  console.log("resolved.");
});
console.log("Hi!");

// Promise
// !!!
// Hi!
// resolved

复制代码

pomise 特点(三种状态)

  • 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、resolved(已成功)和 rejected(已失败)
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从 pending 变为 resolved 和从 pending 变为 rejected
  • promise内部发生错误,不会影响到外部程序的执行。

参考




原文地址:访问原文地址
快照地址: 访问文章快照