zoukankan      html  css  js  c++  java
  • 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()
      
  • 相关阅读:
    剑指offer(18)二叉搜索树的后续遍历
    剑指offer(17)层次遍历树
    剑指offer(16)栈的压入、弹出序列
    剑指offer(15)
    剑指offer(14)
    剑指offer(13)
    剑指offer(12)
    剑指offer(11)
    2020 年 11 月编程语言排行榜,Python 势如破竹,超越 Java?
    Python 除了 time.sleep,你还有一个暂停代码的方法
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13698174.html
Copyright © 2011-2022 走看看