Promise

作者: 俊_杰 | 来源:发表于2017-07-10 23:03 被阅读0次

    Promise/Deferred 模型, 是一种异步编程的模式。其他的异步编程的模式,还有async来控制, 叫做流程控制。

    现今流行的各大js库,几乎都不同程度的实现了Promise,如dojo,jQuery、Zepto、when.js、Q等,只是暴露出来的大都是Deferred对象。

    Callback Hell

    var fs = require('fs');
    fs.readFile('sample01.txt', 'utf8', function (err, data) {
    fs.readFile('sample02.txt', 'utf8', function (err,data) {
        fs.readFile('sample03.txt', 'utf8', function (err, data) {
            fs.readFile('sample04.txt', 'utf8', function (err, data) {
    
            });
        });
    });
    });
    

    这样的嵌套就是令人憎恶的callback hell。

    Promise规范

    • 一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)

    • 一个promise的状态只可能从“等待”转到“完成”态或者“拒绝”态,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换

    • promise必须实现then方法(可以说,then就是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致

    • then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。同时,then可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable对象。

    相关文章

      网友评论

          本文标题:Promise

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