什么是异步编程?
一般情况下代码是由上至下一次执行的,如果当网络不佳或其他状况发生,会导致代码堵塞的情况。而异步编程可以很好的解决这个问题,简单来说异步编程就是程序无须按照代码顺序自上而下的执行,可以同时执行多个程序。
以下是异步编程:
当同步API和异步API同时存在时,异步编程后执行
异步编程的几种方法
-方法一 回调函数
Node.js 异步编程的直接体现就是回调。
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
// getData函数定义
function getData (callback) {}
// getData函数调用
getData (() => {});
使用回调函数查询三个文件案例代码:
let fs = require('fs');
fs.readFile('./a.txt', (err, data) => {
if(err){
console.log('readFile.error:', err);
}else{
fs.readFile('./b.txt', (err1, data1) => {
if(err1){
console.log('readFile.error:', err1);
}else{
return data + data1;
}
})
}
})
使用回调函数会出现回调地狱的情况,可以使用方法二解决
- 方法二 Promise
Promise可以是解决回调地狱的问题。
使用Promise读取三个txt文件案例:
const fs = require('fs')
const path = require('path')
let a_path = path.join(__dirname, 'file', 'a.txt')
let b_path = path.join(__dirname, 'file', 'b.txt')
let c_path = path.join(__dirname, 'file', 'c.txt')
function readFile(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
resolve(data)
})
})
}
let p1 = readFile(a_path)
p1.then(data => {
console.log(data)
return readFile(b_path)
}).then(data => {
console.log(data)
return readFile(c_path)
}).then(data => {
console.log(data)
})