写在前面:
想在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