promise使用例子
song

ES6之前回调完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  // 生成 min(含)到 max(含)的随机整数
    function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    //返回一個隨機數
    function delayTask(success, delay) {
        window.setTimeout(() => {
            var num = getRandomInt(0, 100);
            console.log("---------生成隨機數:" + num)
            success(num)
        }, delay)
    }
   
    delayTask((result) => {
        delayTask((result1) => {
            //console.log(result + result1);
            delayTask((result2) => {
                console.log(result + result1 + result2)
            }, 3000)
        }, 2000)
    }, 1000)

ES6 Promise

ECMAScript 6(ES2015)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

    // 生成 min(含)到 max(含)的随机整数
    function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    function delayTask(delay) {
        return new Promise((resolve, reason) => {
            window.setTimeout(() => {
                var num = getRandomInt(0, 100);
                console.log("---------生成隨機數:" + num)
                if (num > 100) {
                    reason("error")
                }
                resolve(num);
            }, delay)
        });
    }
   
    let arr1 = [];
    delayTask(3000).then(value => {
        console.log("then1 3000ms結果" + value)
        arr1.push(value);
        return delayTask(2000)
    }).then(value => {
        console.log("then2 2000ms結果" + value)
        arr1.push(value)
        return delayTask(1000);
    }).then(value => {
        console.log("then3 1000ms結果" + value)
        arr1.push(value)
        const sum = arr1.reduce((acc, current) => acc + current, 0);
        console.log("最終的結果" + sum)
    })

async/await

ECMAScript 2017(ES8)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    // 生成 min(含)到 max(含)的随机整数
    function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    function delayTask(delay) {
        return new Promise((resolve, reason) => {
            window.setTimeout(() => {
                var num = getRandomInt(0, 100);
                console.log("---------生成隨機數:" + num)
                if (num > 100) {
                    reason("error")
                }
                resolve(num);
            }, delay)
        });
    }

    (async function main() {
        var data3 = await delayTask(3000);
        console.log(data3);
        var data2 = await delayTask(2000);
        console.log(data2);
        var data1 = await delayTask(1000);
        console.log(data1);
        console.log(data3 + data2 + data1)
    })()
由 Hexo 驱动 & 主题 Keep