美文网首页程序员
承诺—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

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