Nodejs新特性async await 的使用


1.Nodejs新特性async await 的使用

  • 以前異步處理方式,通過回調函數來獲取異步方法數據。

    function getData(callback) {
        setTimeout(function(){
            var name = "小紅"
            callback(name)
        },1000)
    }
    
    getData(function (name){
        console.log(name);//小紅
    })
    
  • ES6出來可以通過Promise來進行異步處理

    // 方式1
    var p = new Promise(function (resolve, reject) {
        // resolve 表示執行成功
        // reject 表示執行失敗
        setTimeout(() => {
            var name = "小明";
            resolve(name)
        })
    })
    
    p.then( (data) => {
        console.log(data);// 小明
    })
    // 方式2 ,封裝getData函數
    function getData(resolve, reject) {
        setTimeout(function (){
            var name = "Tom"
            resolve(name);
        }, 1000)
    }
    var p = new Promise(getData)
    
    p.then((data)=> {
        console.log(data); //Tom
    })
    
  • async 是異步簡寫 , 而await可以認為是async wait的簡寫,所以應該很好理解async用於申明一個異步的function,而await用於等待一個異步方法執行完成。

    • 簡單理解:async 是讓方法變成異步,await是等待異步方法執行完畢。
    async function test () {
        return "hello world!"
    }
    console.log(test())// Promise { 'hello world!' }
    async function main () {
        var data = await test();
        console.log(data);// hello world!
    }
    main()
    
  • 示例2

    async function test () {
        return new Promise((resolve, reject) => {
            setTimeout(function () {
                var name = "Lucy";
                resolve(name);
            }, 1000)
        })
    }
    
    
    async function main () {
        var data = await test();
        console.log(data);//Lucy
    }
    main()
    
  • 練習: 獲取當前路徑下為文件目錄的文件名

    var fs = require("fs")
    
    
    async function isDir(path) {
        return new Promise((resolve, reject)=> {
            fs.stat(path, (err,stats)=> {
                if (err) {
                    console.log(err);
                    reject(err);
                    return
                }
                if (stats.isDirectory()) {
                    resolve(true);
                }else {
                    resolve(false);
                }
            })
        })
    }
    
    function  main() {
        var path = "../01.node"
        var dirArr = []
        fs.readdir(path, async (err, data)=> {
            if (err) {
                console.log(err);
                return
            }
            for (var i=0;i<data.length;i++){
                if (await isDir(path + '/' + data[i])) {
                    dirArr.push(data[i])
                }
            }
            console.log(dirArr)
        })
    }
    
    main()
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM