首先例举一个嵌套回调的例子
该例子的缺点是
(1)层层嵌套,可读性差
(2)每一个异步请求都需要捕获错误
// 首先这个是一个嵌套回调的例子
http.get('http://www.baidu.com', function (res) {
console.log(res)
http.get('http://www.baidu.com', function (res) {
console.log(res)
http.get('http://www.baidu.com', function (res) {
console.log(res)
}).on('error', function (err) {
console.error('some error3')
})
}).on('error', function (err) {
console.error('some error2')
})
}).on('error', function (err) {
console.error('some error1')
})
利用一个try catch来捕获多个await 产生的错误
var http = require('http')
var co = require('co')
// 先将 get 函数封装成返回 Promise 对象的函数
var get = function (url) {
return new Promise(function (resolve, reject) {
http.get(url, function (res) {
resolve(res)
}).on('error', function (err) {
reject(err)
})
})
}
async function gen () {
try {
var r1 = await get('http://www.baidu.com')
console.log(r1)
var r2 = await get('http://www.baidu.com')
console.log(r2)
var r3 = await get('http://www.baidu.com')
console.log(r3)
} catch (err) {
// 捕获异步请求的错误统一处理
console.log(err)
}
}