我正在尝试使用JavaScript构造函数,并且该构造函数应该是异步的,因为我使用Phantom JS模块抓取数据,因此这就是为什么我必须使用异步函数通过带有节点的Phantom JS抓取数据的原因JS。
下面是我的代码
const phantom = require('phantom');
async function InitScrap() {
var MAIN_URL = "https://www.google.com/",
//Phantom JS Variables
instance = await phantom.create(),
page = await instance.createPage();
// Load the Basic Page First
this.loadPage = async function() {
console.log("Loading Please wait...");
var status = await page.open(MAIN_URL);
if (status == "success") {
page.render("new.png");
console.log("Site has been loaded");
}
}
}
var s = new InitScrap();
s.loadPage()
// module.exports = InitScrap();
但是,当我运行这段代码时,它说
InitScrap()
不是构造函数,我缺少什么吗?
答案 0 :(得分:1)
有关更多详细信息,请参见此处:Async/Await Class Constructor
但总结一下,
shared object (.so files)
函数不能是构造函数。
async
这将起作用,但是function func(){
this.foo = 'bar'
}
const f = new func();
console.log(f.foo);
将不起作用
答案 1 :(得分:1)
构造函数是返回函数中定义类型的Object的函数,例如您引用的MDN中的“ Person”类:
new
与async
关键字一起使用时,它返回一个带有名称和问候函数的Object。
使用await
关键字时,您可以在函数中Route::get('categories/{category}/{slug}', 'GetFrontendController@tourDetail')->name('tourDetail');
Route::get('pcatslugs/{pcatslug}/{pslug}','GetFrontendController@getPage')->name('page');
进行Promises,但它也将该函数转换为Promise生成器,这意味着它将返回Promise而不是Object,这就是为什么不能是构造函数。