JavaScript ES6 async/await的簡單學習demo

傳統回調函數

// demo1-callback.js
/**
    如今咱們要作個事情,寫個回調函數,每秒輸出一個遞增的數字,輸出三次
    普通回調函數的寫法
 */
function logNumber(n, callback){
    setTimeout(() => {
        console.log(n);
        n++;
        callback(n)
    }, 1000);
}
//  如今調用它
logNumber(1, function(n){
    logNumber(n, function(m){
        logNumber(m, function(q){
            
        })
    })
})

Promise

// demo2-promise.js
/**
    如今咱們改用promise來重寫demo1的函數
 */
// 咱們在這裏暴露那個promise以供demo3調用
function generatorLogNumber(n){
    return new Promise(res => {
        setTimeout(() => {
            console.log(n);
            n++;
            res(n)
        }, 1000);
    })
}
// 如今使用它
generatorLogNumber(1)
    .then(n => {
        generatorLogNumber(n)
        .then(m => {
            generatorLogNumber(m)
            .then(q => {

            })
        })
    })
// 這裏把這個promise暴露出去以供demo3使用,記得把本demo的調用函數註釋掉(就是15-24行註釋掉)
module.exports = generatorLogNumber;

async/await

// demo3-async-await.js
/**
    如今咱們改用更加方便的async/await方式來調用demo2的promise
 */
//  首先把那個promise引入進來
const generatorLogNumber = require('./demo2-promise.js');

(async () => {//雙括號表示當即執行的匿名函數
    const n = await generatorLogNumber(1);
    const m = await generatorLogNumber(n);
    const q = await generatorLogNumber(m);
})()
// 能夠node demo3-async-await.js 來運行看看
相關文章
相關標籤/搜索