我有一个函数,该函数进行调用以获取新的访问令牌getNewAccessToken(),并在该方法中将令牌设置为状态。然后调用另一个方法postComment(),但是它尚未处于状态中正确的accessToken(因为setstate是一个异步调用,并且可能还没有该值。解决此问题的最佳方法是确保postComment( )具有正确的状态值?
goPost() {
console.log("In goPost()");
this.getNewAccessToken();
this.postComment();
}
async getNewAccessToken(){
const response = await fetch(
`https://www.reddit.com/api/v1/access_token`... set up fetch
);
if (response.ok) {
this.setState({
accessToken: json.access_token
});
}
}
async postComment() {
let accessToken = this.state.accessToken;
}
答案 0 :(得分:0)
因此,这些都是异步调用,这意味着它们不会以可预测的顺序触发。为了使这项工作有效,您必须处理好所有事情并强制执行顺序。为了进行此更改,应将goPost函数转换为异步调用。然后,它应等待后续调用以强制暂停以获取令牌。
async goPost() {
console.log("In goPost()");
await this.getRefreshToken();
this.postComment();
}
因此,直到您收到令牌后,this.postComment才会执行。另外请注意,除非您打算在该函数中执行异步操作,否则无需使评论异步。
异步编程是一个棘手的问题!可以的话很好 阅读有关这些概念的更多信息,以便您对 这些东西的工作方式!观看this了解更多信息,它对我有很大帮助!
答案 1 :(得分:0)
您可以在postComment
-
access_token
,如果是,则跳转到3,如果不是,getNewAccessToken
方法内调用postComment
access_token
,access_token
发表评论access_token
过期而导致您的发表评论的呼叫失败,请再次呼叫getNewAccessToken
(在第2点之后)并遵循循环。