学习node记录--爬爬(1,之前

这篇博客探讨了ES6中的Promise和Async/Await特性在处理异步代码时的重要作用。Promise用于将异步代码转换为顺序执行,讲解了Promise的基本用法,包括then方法和catch方法的错误处理。接着,文章介绍了Async函数和await关键字,强调await仅适用于Promise,确保异步操作的同步性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


写在前面:
想在job类网站上收集数据,找了部分教程,参考,吸纳,测试成功后遇到的问题是–测试和实时应用还有不小的空间。
在这里不得不先补全以前没有在在意的知识,这个过程中,有时可以理解,有时脑仁痛又或朦胧如听异语白驹过隙,打着哈欠继续猜测吧~

ES6^ -->功能、方法二三

javascript es6用着很方便,语法什么的比较顺手。c蛋的是,新内容功能强化之后灵活性下降,就不停打补丁,各种功能‘方法’补丁。

1.Promise

p=new promise((resolve,reject)=>{
//下边异步
	callbeack.get(age).end((err,res)=>{
		if(err)
			{reject(Error('这里返回错误'))
		}else{
		//功能代码
		resolve('立即值:所需数据')
		}
	})
})
//------------------------------------------------------------
p.then(data=>{
    //这里的data即是上边promise主体里的resolve
	console.log(data)
},err=>{
	//检错搭配
	console.log(err)
})

promise的原始概念
主要作用是使【异步代码】实现【顺序代码】的功能。
p.then()中arg1的data参数是直接接收的resolve;而err则对应接收reject内里数据。
.
.

indexDown = () => { 
	let a;
    return new Promise((resolve, reject) =>{//promise以函数返回值的形式使用
    setTimeout(()=>{//setTimeout是等待函数,1000是毫秒
    	resolve('数据')
    	},1000)
    })
}

indexOn = () => { 
	let a;
    return new Promise((resolve, reject) =>{
    setTimeout(()=>{
    	reject(Error('错误'))
    	},50)
    })
}

//---------------------------------------------------------------
main=()=>{
	indexDown()
	.then(data=>{
		console.log('测试')
		return indexOn()
		})
	.then(data=>{
		console.log('indexDown链式链接indexOn,indexOn中没有resolve()')
		})
	.catch(err=>{
		console.log(err)
		})
}

倒数第4行的catch()和上一块代码最后.then()中的参数二【err】一样,都是检测方式。
.
.
.

createPms=num=>{
	return new promise((resolve,reject)=>{
		setTimeout(_=>{
			console.log('test: ${num}')
		},1000)
	})
}

testPms=_=>{
	let pmsArr=[]
	for(let i=0;i<len;i++){
		pmsArr.push(createPms(i))
	}
	promise.all(pmsArr).then(_=>{
	for(let i=0;i<data.length;i++){
	console.log(i)
		}
	})
}

var pmsArray = [];
        for (var i = 0; i < 10; i++) {
            pmsArray.push(createPromise());
        }
        Promise.all(pmsArray).then(function() {
             for (i = 0; i < data.length; i++)
                 console.log(i);
                 })

函数原型:
function name(arg1,…){code…}
简化:name=(arg1,…)=>{code…}
name=_=>{code…}//无arg简化
arg=>code x 2//以下用于无需函数名的callback中
_=>code x 2//无arg函数唯一操作return code x 2简化

.

Async

wachTime = num => {
    let url = 'https://www.xxxxx.com/jb/pn' + num + '/'
    console.log('aaa:  end')
    return new Promise((resolve, rejetc) => {
        superagent.get(url).end((req, res) => {
            const $ = cheerio.load(res.text)
            const txt = $('.name').eq(0).text()
            console.log('bbb:  ' + txt)
            resolve(txt)
        })
    })
}
showInfo = async _ => {
    const len = 4
    let tmp = []
    for (let z = 1; z < len; z++) {
        await tmp.concat(wachTime(z))
    }
    console.log('ccc: ' + tmp)

}

async函数下的await方法只对promise有效;比如wachTime的return必须是promise

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值