我正在构建的chrome插件中有一个es6类“GetLink”。当使用chrome的“tabs”api调用时,该类将获得活动选项卡的第一个链接。这是代码:
export class GetLink {
constructor(tabs) {
this.ajaxGet(
`${tabs[0].url}?debug`,
data => this.getLink(data),
error => {throw new Error(`AJAX GET failed because response was ${error}`)}
);
}
ajaxGet(url, success, error) {
if(!window.XMLHttpRequest) throw new Error(`This browser does not support XMLHttpRequest`);
let request = new XMLHttpRequest();
request.onreadystatechange = () => {
if(request.readyState === 4) {
if(request.status !== 200) {
console.log(request.status);
if(error && typeof error === "function") {
error(error);
}
}
if(success && typeof success === "function") {
success(request.responseText);
}
}
};
request.open("GET", url);
request.send();
}
getLink(data) {
let nodeList = document.createElement("html");
nodeList.innerHTML = data;
return nodeList.querySelector("a").href;
}
}
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, tabs => {
console.log(new GetLink(tabs));
});
我希望,使用“new”关键字,我会得到GetLink实例的结果。相反,我得到了整个未经实例化的课程。
如果在构造函数中的“getAjax”成功处理程序调用中我记录“this.getLink(data)”而不是返回它,我通过调用新的GetLink(制表符)来获取日志。
这是因为getAjax是异步的吗?如果是这样,解决这个问题的好方法是什么? (我尝试在构造函数中返回this.getAjax,将实例分配给变量等)如果不是我做错了什么?