来,我来回答你这问题
首先我觉得,在非必须情况下,没必要费用es6的class,有的时候模块直接导出一个对象提好的。如果是一个class,实例方法你还要new一个对象才能调用,如若不然,还的申明为类(静态)方法。反而不如js的{xx:xxx}来的方便。
再说你的问题,主要是:如果你调用的一个方法返回值是一个promise。那么你有两种办法可获得。拿你的代码做示例
//第一种办法:用es6的链式回调
Crawler.test().then(function (newCollection) {
console.log(newCollection);
});
//第二种办法:用es7的awiat
(async function () {//如果代码有异步操作,必须声明该代码块为异步代码,es7规定用方法将其包含起来,async表明此处为异步执行的代码块
let newCollection=await Crawler.test();//await意为需要等待我执行完,此代码块内才能继续向下执行。但是并不影响其它地方。也就是说只有标识为async内的代码块才受await影响成为同步
console.log(newCollection);
})()
下边贴上我的爬虫
const http=require('http');
const cheerio=require('cheerio');
function myHttp(methods,url){
let promise=new Promise(function (resolve, rejecte) {
let req=http.get(url)
req.on("response",function (res) {
let finalData='';
res.on("data",function (data) {
finalData+=data;
});
res.on('end', function(date){
resolve(finalData.toString())
})
});
})
return promise;
}
//调用
(async function () {
let html=await myHttp('post','http://www.cnblogs.com/flyings/default.html?page=2')
console.log(html)
})()
效果图
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…