我正在尝试用JavaScript制作一个构造函数,这个构造函数应该是异步的,因为我使用的是Phantom JS模块来抓取数据,所以我必须使用异步函数通过带有Node JS的Phantom 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()
不是构造函数,我是不是遗漏了什么?
function Person(name) {
this.name = name;
this.greeting = function() {
alert('Hi! I'm ' + this.name + '.');
};
}
当与new
关键字一起使用时,它返回一个带有名称和问候语函数的对象。
当您使用async
关键字时,您可以在函数中使用await
Promises,但它也会将该函数转换为promise生成器,这意味着它将返回promise,而不是Object,这就是为什么它不能成为构造函数的原因。
有关更多详细信息,请参阅此处:Async/Await类构造函数
但总的来说,
async
函数不能是构造函数。
function func(){
this.foo = 'bar'
}
const f = new func();
console.log(f.foo);
这将起作用,但async function func() { .. }
将不起作用