ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Nodejs新特性async await 的使用

2020-09-19 23:31:33  阅读:205  来源: 互联网

标签:function resolve name Nodejs await var async data


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()
    

标签:function,resolve,name,Nodejs,await,var,async,data
来源: https://www.cnblogs.com/xujunkai/p/13698174.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有