只需在下面的代码的post方法中访问baseUrl。 正确的方法是什么? 如果您能向我解释为什么这行不通,我将很感激。
const API = {
baseUrl: "http://my_api_address",
post: (path, payload) => {
let headers = {
Accept: "application/json",
"Content-Type": "application/json"
};
let token = localStorage.getItem("accessToken");
if (token) {
headers["Authorization"] = "Bearer " + token;
}
alert(this); // shows undefined so I can't access this.baseUrl inside this function
return fetch(this.baseUrl + path, {
method: "POST",
headers,
body: JSON.stringify(payload)
})
.then(res => {
return res.json().then(json => ({ json, res }));
})
.then(({ json, res }) => {
if (!res.ok) {
return Promise.reject(json);
}
return json;
});
}
};
根据要求:
API.post("/account/resetpassword", data)
.then(function(json) {
UI.toggleModal("#modalId");
UI.loader("hide");
UI.alert(json.success, json.message);
})
.catch(function(json) {
console.log(json);
});
如果我将this.baseUrl替换为“ http://my_api_address”,则上面的代码将起作用,因此我认为没有其他问题。
答案 0 :(得分:2)
这是因为对于post:
,您使用了一个箭头函数,该函数不绑定自己的this
,而是使用了最接近的词法定义的一个(如果有的话)。
改为使用function() {...}
语法。
请注意,您没有显示对API.post()
的呼叫,因此也可能存在其他问题