不是具有异步功能的构造函数

Not a Constructor with async function

我正在尝试在 JavaScript 中创建一个构造函数,这个构造函数应该是异步的,因为我正在使用 Phantom JS 模块来抓取数据,所以这就是我必须使用异步函数来抓取数据的原因通过 Phantom JS 和 Node 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();

But when I run this code it says, InitScrap() is not a constructor, am I missing something ?

参考这里了解更多详情:

但总而言之,

async 函数不能是构造函数。

function func(){
    this.foo = 'bar'
}

const f = new func();
console.log(f.foo);

这会起作用,但 async function func() { .. } 不会起作用

构造函数是 return 函数中定义类型的对象的函数,例如 "Person" class 来自您引用的 MDN:

function Person(name) {
  this.name = name;
  this.greeting = function() {
    alert('Hi! I\'m ' + this.name + '.');
  };
}

当与 new 关键字一起使用时,它 return 是一个具有名称和问候功能的对象。

当你使用 async 关键字时,你可以 await 函数中的 Promise,但它也会将该函数转换为一个 promise 生成器,这意味着它将 return 一个 Promise,而不是一个对象,这就是为什么它不能是构造函数的原因。