node入门异步 和promise

Posted cuter、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node入门异步 和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方法可以拿到异步里面的数据

以上是关于node入门异步 和promise的主要内容,如果未能解决你的问题,请参考以下文章

澄清 node.js + promises 片段

前端面试题之手写promise

node.js异步控制流程 回调,事件,promise和async/await

ES6基础入门教程(十六)promise异步队列

Netty入门——Future和Promise接口

进击Node.js基础