Typescript 类:如何初始化需要多个承诺的变量?
Typescript Classes: How to initialize variables that require multiple promises?
我的objective是在构造函数里面初始化'page'变量。问题是我无法在构造函数内部执行 make async/await promises。
所以我的想法是“哦,只需在 class 中创建一个方法,然后在构造函数中调用它。”但当然,我错了。打字稿仍然对我大喊大叫说页面没有被明确初始化。事实上,如果没有 async/await,我无法在浏览器变量上调用“newPage()”方法。
我怎样才能解决这个问题?
感谢您提前抽出时间。
class Puppet {
private page: puppeteer.Page;
contructor() {
this.initialize();
}
async initialize(){
const browser = await puppeteer.launch({headless:true});
this.page = await browser.newPage();
await this.page.goto(this.url);
}
}
从您的调用方法中,首先创建对象,然后调用 initialize()
函数:
class Puppet {
private page!: puppeteer.Page;
async initialize(){
const browser = await puppeteer.launch({headless:true});
this.page = await browser.newPage();
await this.page.goto(this.url);
}
}
// ... in some async function
const puppet = new Puppet();
await puppet.initialize();
如果你想让这个更方便一点,添加一个异步工厂函数:
class Puppet {
private page!: puppeteer.Page;
async #initialize(){
const browser = await puppeteer.launch({headless:true});
this.page = await browser.newPage();
await this.page.goto(this.url);
}
static async create() {
const puppet = new Puppet();
await puppet.#initialize();
return puppet;
}
}
// ... in some async function
const puppet = await Puppet.create();
这还允许您将初始化隐藏在私有函数中。
我的objective是在构造函数里面初始化'page'变量。问题是我无法在构造函数内部执行 make async/await promises。 所以我的想法是“哦,只需在 class 中创建一个方法,然后在构造函数中调用它。”但当然,我错了。打字稿仍然对我大喊大叫说页面没有被明确初始化。事实上,如果没有 async/await,我无法在浏览器变量上调用“newPage()”方法。 我怎样才能解决这个问题? 感谢您提前抽出时间。
class Puppet {
private page: puppeteer.Page;
contructor() {
this.initialize();
}
async initialize(){
const browser = await puppeteer.launch({headless:true});
this.page = await browser.newPage();
await this.page.goto(this.url);
}
}
从您的调用方法中,首先创建对象,然后调用 initialize()
函数:
class Puppet {
private page!: puppeteer.Page;
async initialize(){
const browser = await puppeteer.launch({headless:true});
this.page = await browser.newPage();
await this.page.goto(this.url);
}
}
// ... in some async function
const puppet = new Puppet();
await puppet.initialize();
如果你想让这个更方便一点,添加一个异步工厂函数:
class Puppet {
private page!: puppeteer.Page;
async #initialize(){
const browser = await puppeteer.launch({headless:true});
this.page = await browser.newPage();
await this.page.goto(this.url);
}
static async create() {
const puppet = new Puppet();
await puppet.#initialize();
return puppet;
}
}
// ... in some async function
const puppet = await Puppet.create();
这还允许您将初始化隐藏在私有函数中。