promise原理


本文摘自PHP中文网,作者藏色散人,侵删。

一、 promise应用场景

1 解决回调地狱

比如我们经常可能需要异步请求一个数据之后作为下一个异步操作的入参

1

2

3

4

5

6

7

8

9

10

11

getData(function(a){ 

    getMoreData(a, function(b){

        getMoreData(b, function(c){

            getMoreData(c, function(d){

                getMoreData(d, function(e){

                    ...

                });

            });

        });

    });

});

可以发现上面的代码看起来是非常可怕的,层层嵌套,如果在加上复杂的逻辑判断,代码可读性会变得非常差。

但是你如果使用promise的话:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function getData() {

    return new Promise(function (resolve, reject) {

        resolve(1);

    });

}

function getMoreData(arg) {

    return new Promise(function (resolve, reject) {

        resolve(arg + 10);

    });

}

getData().then(function (a) {

    console.log(a); // 1

    return getMoreData(a);

}).then(function (b) {

    console.log(b); // 11

})

把上面代码再简洁点儿

1

2

3

getData()

.then(a => getMoreData(a))

.then(b => console.log(b));

2 promise 可以实现在多个请求发送完成后 再得到或者处理某个结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

// 两个数据都回来之后再进行操作

let fs = require('fs');

fs.readFile('./1.txt', 'utf8', function (err, data) {

    console.log(data);

})

fs.readFile('./2.txt', 'utf8', function (err, data) {

    console.log(data);

})

使用promise的话就可以实现:

let fs = require('fs');

function read(url){

    return new Promise(function(resolve,reject){

        fs.readFile(url,'utf8',function(err,data){

            if(err)reject(err);

            resolve(data);

        })

    })

}

Promise.all([read('1.txt'),read('2.txt')]).then(data=>{

    console.log(data);

},err=>{

    console.log(err);

});

二、promise原理实现

阅读剩余部分

相关阅读 >>

promise是什么意思

实现promise的手把手教程

es6之promise的学习

深入浅析 promise 比 settimeout() 快的原因

理解js原型链,继承和promis

es6-promise源码的分析

promise原理

如何将 javascript 回调转换为 promise?方法介绍

需要真正明白的promise

更多相关阅读请进入《promise》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...