Promise
- Promise是一个容器,保存异步代码的执行结果;
- 作用:解决异步回调地域(异步代码,层层嵌套);
- 缺陷:语法、编码上还是存在嵌套现象
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()
扩展阅读
- 错误处理机制
- Promise 对象
- 如何包装 try…catch:JavaScript 语言的 try…catch 用起来非常不直观,作者提供了一种方法,将其包装成函数用法。