同步API,异步API定义
异步API返回值获取结果
多层异步API嵌套,按顺序执行,方式1es6
多层异步API嵌套,按顺序执行,方式2es7
将NodeJS,第三方API中异步函数包装
同步API,异步API定义
同步API定义:
1.通过返回值得到api结果
2.当前api执行完成后执行下一个api
异步API定义:
1.通过函数得到api结果,需要一定时间后得到api结果
2.异步API执行顺序相同于堆中执行方式一样
3.如果用同步API方式获取异步API得到的是undefined
异步API返回值获取结果
//异步编程:通过回调函数办法获取返回值
1.将回调函数作为参数传递进异步函数
2.异步函数内部调用回调函数
3.将异步函数执行结果以实参方式传递给回调函数
4.回调函数中的行参为异步函数处理结果
function f1(callback) {
setTimeout(function () {
callback("异步函数的执行结果")
//1.调用回调函数
//2.将异步函数的执行结果传递给回调函数中的行参
}, 2000)
}
f1(function (data) { })
//1.调用异步函数
//2.行参为异步函数执行结果
多层异步API嵌套,按顺序执行,方式1es6
//回调地狱解决办法
function f1() {
let promise = new Promise((resolve, reject) => {
//resolve("异步函数执行结果")//成功:将异步函数执行结果传递出去
//reject("执行结果失败提示信息")//失败:将失败文案传递出去
fs.readfile(realpath, (error, result) => {
if (error != null) {
reject(error)
}
else if (error = null) {
resolve(result)
}
})
})
return promise
}
f1().then(result1 => {
consolu.log(result)
return f2() //用return f2()调用,进行回调地狱
}).then(result2 => {
consolu.log(result)
return f3() //用return f2()调用,进行回调地狱
})
f1().catch(error => {
consolu.log(error)
return f2() //用return f2()调用,进行回调地狱
})
多层异步API嵌套,按顺序执行,方式2es7
//回调地狱解决办法 异步函数es7
async function lzy() {
throw "错误信息" //通过throw传递错误信息,throw执行后,与return一样,后续代码不能执行
}
var lzy = async () => { }
await lzy()
//1.异步函数默认返回值是promise对象
//2.promise对象内部存储return的值,
//3.await是顺序执行
//4.需要异步函数在外封装调用代码,此处没写
await lzy().then(function (data) { }) //dat参数为函数定义时return的值
await lzy().catch(function (err) { }) //获取错误信息err,就是throw后面的信息
NodeJS,第三方API中异步函数包装
//包装nodeJS中的三方模块方法
var promisify = require("util").promisify //引入util模块中的promisify方法
var readFile = promisify(fs.readFile) //举例:将readFile方法进行改造
//依次执行 读取文件操作
async function run() {
let r1 = await readFile("地址", "utf8")
let r1 = await readFile("地址", "utf8")
let r1 = await readFile("地址", "utf8")
}