美文网首页
ES6 Promise详解

ES6 Promise详解

作者: ryanWSJ | 来源:发表于2020-03-04 14:04 被阅读0次

一、为什么有Promise

在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱。代码层层嵌套,阅读性很差。为了优化这类问题,出现了Promise。

二、 什么是Promise

Promise 是异步编程的一种解决方案。简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise 特点:

  1. 中文意思是“承诺”,对象的状态不受外界影响。Promise对象代表一个异步操作,只有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),只有内部的异步操作结果可以决定状态,其它任何操作都无法改变。
  2. 状态一旦改变之后将不会再发生变化,无论什么时候获取都是这个结果。

三、怎么使用

一个简单例子:

function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, 'done')
  })
}

timeout(100).then((value) => {
  console.log(value);
})

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

pro.then((res) => {
    // resolev 完成状态回调
}, (error) => {
    // rejected 失败状态回调,可省略
}).catch((err) => {
    // 捕捉到错误
}})

then方法里面第二参数是reject的时候触发的回调函数,可省略。then方法后面可以根catch,promise内部和then方法内部的错误都会被catch捕捉到。

四、Promise的API

Promise.resolve()
Promise.reject()
Promise.prototype.then()
Promise.prototype.catch()
Promise.all(promises: List<Promise>) // 所有的promise都返回执行才会执行then
Promise.race(promises: List<Promise>) // 完成一个promise即可

例子:

let pro1 = new Promise(function(resolve,reject){
    resolve(1);
});
let pro2 = new Promise(function(resolve,reject){
    resolve(2);
});
let pro3 = new Promise(function(resolve,reject){
    resolve(3);
});
Promise.all([pro1, pro2, pro3]).then(function (results) {
    // results 是一个数组,保存着所有promise中resolve返回的值
    console.log('success:' + results);
    console.log(results);
}).catch(function(r){
    console.log("error");
    console.log(r);
});

<meta charset="utf-8">

参考资料:
阮一峰《ES6 入门教程》
黄大渣渣《js promise看这篇就够了》

相关文章

  • 详解ES6 Promise

    整理Promise提供的各种方法和错误处理方法。 1.Promise.resolve() 1.1 Promise....

  • ES6——Promise详解

    了解Promise首先要了解:JS中的两种编程思想即 同步、异步JS是单线程的 --> JS就是一个傻子,脑子...

  • ES6 Promise 详解

    ECMAscript 6 原生提供了 Promise 对象。 Promise 对象代表了未来将要发生的事件,用来传...

  • ES6 Promise详解

    一、为什么有Promise 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过...

  • ES6--Promise

    学过ES6的同学大概都知道Promise,可想而知Promise在ES6中很重要。 Promise对象代表了未来将...

  • Promise详解

    Promise详解词:Promise,resolve,reject,Prepending,Resolve,Reje...

  • Promise.done(),Promise.finally()

    es6 Promise.done(),Promise.finally()promise对象的finally函数为什...

  • ES6 Promise

    ES6 promise 的一些常用方法 Promise.prototype.then() Promise.prot...

  • ES6异步:Promise

    #Promise迷你书通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise

  • ES6 Promise 异步编程方案

    为什么使用 Promise ? Promise 是 ES6 提出的异步编程方案 ! ES6 之前,如果我们都是通过...

网友评论

      本文标题:ES6 Promise详解

      本文链接:https://www.haomeiwen.com/subject/stjvlhtx.html