美文网首页程序员
承诺—promise

承诺—promise

作者: 旧丶时候 | 来源:发表于2017-09-05 10:08 被阅读0次

0. 前言

有多少情侣曾许下承诺,到最后无非俩个结果,一个兑现了,另一个就是没有,那么在程序中也可以许下承诺,2015 年 6 月,ECMAScript 6 的正式版终于发布了。ES6 原生提供了 Promise 对象。so,它就可以许下承诺。


0.jpg

1. 简介

所谓 Promise,就是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作)

2. 语法

new Promise(
    /* executor */
    function(resolve, reject) {...}
);

参数
executor
executor是一个带有resolve和reject两个参数的函数 。executor 函数在Promise构造函数执行时同步执行,被传递resolve和reject函数(executor 函数在Promise构造函数返回新建对象前被调用)。resolve 和 reject 函数被调用时,分别将promise的状态改为fulfilled(完成)或rejected(失败)。executor 内部通常会执行一些异步操作,一旦完成,可以调用resolve函数来将promise状态改成fulfilled,或者在发生错误时将它的状态改为rejected。

如果在executor函数中抛出一个错误,那么该promise 状态为rejected。executor函数的返回值被忽略。

3. 状态

一个 Promise有以下几种状态:

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

4. 特点

Promise 对象有以下两个特点。

(1)对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是「承诺」,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能:从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

promises.png

举个例子

var myFirstPromise = new Promise(function(resolve, reject){
    //当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
    //在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.
    setTimeout(function(){
        resolve("成功!"); //代码正常执行!
    }, 250);
});

myFirstPromise.then(function(successMessage){
    //successMessage的值是上面调用resolve(...)方法传入的值.
    //successMessage参数不一定非要是字符串类型,这里只是举个例子
    console.log("Yay! " + successMessage);
});

5. 基本的API

  1. Promise.resolve()
  2. Promise.reject()
  3. Promise.prototype.then()
  4. Promise.prototype.catch()
  5. Promise.all() // 所有的完成

参考文献MDN

6.浏览器兼容性

截图1.jpeg
截图2.jpeg

7. 结束语

你比永久还永久,比漫长更漫长。

相关文章

  • 承诺—promise

    0. 前言 有多少情侣曾许下承诺,到最后无非俩个结果,一个兑现了,另一个就是没有,那么在程序中也可以许下承诺,20...

  • Promise基础用法

    > 简述: ## 什么是Promise? -Promise是用来处理异步的; -Promise就是承诺,对未来的承...

  • ES6 (一) Promise ( const,let,

    (一) Promise promise是承诺,允诺的意思。(是将来发生的事) (1) Promise是什么? 从用...

  • netty案例,netty4.1源码分析篇六《Netty异步架构

    前言介绍 分析Promise之前我们先来看两个单词;Promise、Future Promise v. 许诺;承诺...

  • Promise

    什么是promise? 所谓Promise,字面上可以理解为“承诺”,就是说A调用B,B返回一个“承诺”给A,然后...

  • promise

    promise是什么 promise是一个对象“承诺将来会执行”的对象在JavaScript中称为Promise对...

  • promise对象(“承诺”)

    零、异步编程: Javascript语言的执行环境是"单线程"好处是实现起来简单,执行环境相对单纯;但只要有一个拖...

  • vue es6关于promise的项目实战。

    学习Promise前我们先搞清楚这几个单词。 promise,resolve,reject =>承诺,解决,失败。...

  • ECMAScript之Promise

    学习Promise前我们先搞清楚这几个单词。 promise,resolve,reject => 承诺,解决,失败...

  • js-Promise基础

    js-Promise基础(第三周) Promise含义 promise意思为允诺、许诺、承诺在js中为了解决编写代...

网友评论

    本文标题:承诺—promise

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