node入门(2)异步 和promise

Node里面的异步和promise对象

1.异步的例子

for (var i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i)
  }, 100)
}
//输出结果为3个3

2.for循环改造异步

用自执行函数解决

fs.readdir(path, (err, data) => {
  if (err) {
    console.log(err)
    return
  }
  (function getDir(i) {
    if (i === data.length) {
      console.log(dir)
      return
    }
    fs.stat(path + '/' + data[i], (err, stats) => {
      if (stats.isDirectory()) {
        dir.push(data[i])
      }
      getDir(i + 1)
    })
  })(0)
})

用promise和await ,async解决
第一个方法为异步请求成功后的方法,第二个方法为异步请求失败后的方法
01

async function isDir(path) {
  return new Promise((resolve, resject) => {
    fs.stat(path, (err, stat) => {
      if (err) {
        console.log(err)
        resject(err)
        return
      }
      if (stat.isDirectory()) {
        resolve(true)
      } else {
        resolve(false)
      }
    })
  })
}
//2.获取wwwrrot看i面的所有资源,循环遍历
function main() {
  let dir = []
  var path = './wwwroot'
  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])) {
        dir.push(data[i])
      }
    }
    console.log(dir)
  })
}
main()

02

async function test() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      var name = 'zhangsan'
      resolve(name)
    }, 1000)
  })
}
async function main() {
  var data = await test()
  console.log(data)//zahngsan
}
main()

  1. async和await必须配套使用
  2. await的就近函数才使用await
  3. promise里面的resolve方法可以拿到异步里面的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值