Promise

  1. Promise是一个容器,保存异步代码的执行结果;
  2. 作用:解决异步回调地域(异步代码,层层嵌套);
  3. 缺陷:语法、编码上还是存在嵌套现象

const fs = require('fs')
function createPromise(name){
    return new Promise((resolve, reject) => {
        fs.readFile(`${__dirname}/${name}.txt`,'UTF-8', (error, data)=>{
            if(data){
                resolve(data)
            }else{
                reject(error)
            }
        })
    })
}
createPromise("a").then(data=>{
    console.log(data)
    return createPromise("b")
}).then(data=>{
    console.log(data)
    return createPromise("c")
}).then(data=>{
    console.log(data)
    return createPromise("d")
}).then(data=>{
    console.log(data)
}).catch(error=>{
    console.log(error)
})

try-catch-finally

  • 作用: 让开发者的代码更加健壮

  • 注意: catch 和 finally 语句都是可选的,但必须至少使用一个。

语法:

try {
    tryCode - 尝试执行代码块
}
catch(err) {
    catchCode - 捕获错误的代码块
}
finally {
    finallyCode - 无论 try / catch 结果如何都会执行的代码块
}

async-await

async本身不起作用,仅仅是函数的修饰符, 但是只有用了async的函数, 才能在函数体中使用await来执行promise;

const fs = require('fs')
function createPromise (name) {
  return new Promise((resolve, reject) => {
    fs.readFile(`${__dirname}/${name}.txt`, 'UTF8', (error, data) => {
      if (data) {
        resolve(data)
      } else {
        reject(error)
      }
    })
  })
}
async function readFile () {
  try {
    let res1 = await createPromise('a')
    console.log(res1)
 
    let res2 = await createPromise('b')
    console.log(res2)
 
    let res3 = await createPromise('c')
    console.log(res3)
  } catch (error) {
      console.log(error)
  }
}
readFile()

扩展阅读