Async函数实用指南
栏目: JavaScript · 发布时间: 6年前
内容简介:在JavaScript里,所有的操作都是通过异步完成,不需要像python一样按顺序执行,非常容易因为某个函数执行速度过慢导致整个程序阻塞,从效率上来说远远低于JavaScript的原生异步机制。当然,python也可以实现异步功能,但是会麻烦不少,尤其对于一些代码量少的小爬虫非常不友好。在我上篇爬虫文章里就提到了不少异步带来的好处,但同时坏处也不少,很多时候会导致输出的结果并不是我们想要的。比如我们希望在爬取到所有的数据后才开始执行处理函数,但JavaScript会在爬取数据的同时执行处理函数,直接导致爬
在JavaScript里,所有的操作都是通过异步完成,不需要像 python 一样按顺序执行,非常容易因为某个函数执行速度过慢导致整个程序阻塞,从效率上来说远远低于JavaScript的原生异步机制。当然,python也可以实现异步功能,但是会麻烦不少,尤其对于一些代码量少的小爬虫非常不友好。
在我上篇爬虫文章里就提到了不少异步带来的好处,但同时坏处也不少,很多时候会导致输出的结果并不是我们想要的。比如我们希望在爬取到所有的数据后才开始执行处理函数,但JavaScript会在爬取数据的同时执行处理函数,直接导致爬虫出错。
0.举个例子:
const getWeb = function(){
requestSomething()
setData()
return console.log(“3.程序结束”)
}
const requestSomething = function(){
setTimeout(() => console.log(‘1.网页数据爬取完毕!’),2000)
}
const setData = function(){
console.log(‘2.开始处理数据!’)
}
getWeb()
复制代码
输出结果:
看到结果我们发现,明明是爬取网页的requestSomething函数先执行,但是先输出结果的却是处理函数setData,甚至在整个getWeb函数返回后才开始输出爬取结果。
为了解决这个问题,束缚住JavaScript这匹脱缰的野马,这里就需要用到Async函数,让JavaScript程序能按照我们希望的顺序执行。
1.如何创建Async使用
首先要创建一个async函数,在我们希望控制异步的地方使用await来进行控制,比如:
const getWeb = async function(){
await requestSomething()
setData()
return console.log(“3.程序结束”)
}
复制代码
接下来还需要改造requestSomething函数,首先直接返回一个Promise对象,里面通过匿名函数接收两个参数,分别是resolve和reject,当执行resoleve()时表示当前函数执行完毕,而reject()则是返回错误信息,我们先来看resoleve:
const requestSomething = function(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(‘1.网页数据爬取完毕!’)
resolve()
},2000)
})
}
复制代码
来运行一下改造后的代码:
2.如何处理错误
还记得有一个reject命令吗?在爬取失败时,可以通过reject返回失败内容,然后使用catch方法来输出,现在,来改造一下代码,在爬取失败时输出失败信息:
const requestSomething = function(){
return new Promise((resolve, reject) => {
let err = ‘1.爬取失败!’
if(typeof err != ‘undefined’){
//返回错误信息
reject(err)
} else (
setTimeout(() => {
console.log(‘1.网页数据爬取完毕!’)
resolve()
},2000)
)
})
}
const getWeb = async function(){
//通过catch捕捉返回的错误信息
await requestSomething().catch(e => console.log(e))
setData()
return console.log(“3.程序结束”)
}
复制代码
输出结果:
至此,我们已经成功控制住了异步程序,可以在小爬虫里直接应用了!
完整代码: github.com/Card007/Nod…
也欢迎访问我的主页:Nothlu’s Blog
以上所述就是小编给大家介绍的《Async函数实用指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Hive 窗口函数进阶指南
- 《Haskell趣学指南》笔记之函数
- [译] 实用指南: 编写函数式 JavaScript
- React 函数式组件性能优化指南
- [译] 编写函数式的 JavaScript 实用指南
- 《Haskell趣学指南》笔记之高阶函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Algorithms for Programmers
Andrew Binstock、John Rex / Addison-Wesley Professional / 1995-06-29 / USD 39.99
Most algorithm books today are either academic textbooks or rehashes of the same tired set of algorithms. Practical Algorithms for Programmers is the first book to give complete code implementations o......一起来看看 《Practical Algorithms for Programmers》 这本书的介绍吧!