如何在Javascript中通知上次web服务调用何时完成?
我想将这段代码称为:如何在Javascript中通知上次web服务调用何时完成?,javascript,axios,Javascript,Axios,我想将这段代码称为: this.setState({ // <------------ CODE 1 pages: pages }); 为了在设置状态之前等待每个操作完成,我们可以利用。但是,如果一个承诺被拒绝,则Promise.all将取消所有请求。这就是为什么我们要添加.catch(e=>e),它真正做的就是捕获任何拒绝并将其传递给Promise.all,就像Promise解析一样 结合wait我们可以等待Promise.all,然后循环结果,调用setState或任何您真正想要
this.setState({ // <------------ CODE 1
pages: pages
});
为了在设置状态之前等待每个操作完成,我们可以利用。但是,如果一个承诺被拒绝,则Promise.all将取消所有请求。这就是为什么我们要添加
.catch(e=>e)
,它真正做的就是捕获任何拒绝并将其传递给Promise.all,就像Promise解析一样
结合wait
我们可以等待Promise.all,然后循环结果,调用setState
或任何您真正想要的
let accessToken = response.accessToken;
axios
.get(
"https://graph.facebook.com/v5.0/me/accounts?fields=id,name&access_token=" +
response.accessToken
)
.then(async pagesResponse => {
console.log("test");
let promisesArray = pagesResponse.data.data.map(async page => {
console.log("page " + page.id + " " + page.name);
this.setState({
page: response.data.data
});
return axios
.get(
"https://graph.facebook.com/v5.0/" +
page.id +
"/events?access_token=" +
accessToken
)
.catch(e => e);
});
const responses = await Promise.all(promisesArray);
var pages = {}; // <------------ CODE 2
responses.forEach((response, i) => {
console.log("test 2");
var events = {};
let eventList = response.data.data.map(event => {
console.log("event " + event.id + " " + event.name);
events[event.id] = event.name;
});
const page = pagesResponse.data.data[i];
pages[page.id] = [page.name, events];
});
this.setState({
// <------------ CODE 1
pages: pages
});
});
let accessToken=response.accessToken;
axios
.得到(
"https://graph.facebook.com/v5.0/me/accounts?fields=id,名称和访问权\u令牌=”+
response.accessToken
)
。然后(异步页面响应=>{
控制台日志(“测试”);
让promisesArray=pagesResponse.data.data.map(异步页面=>{
console.log(“page”+page.id+“”+page.name);
这是我的国家({
页面:response.data.data
});
返回轴
.得到(
"https://graph.facebook.com/v5.0/" +
page.id+
“/events?访问\u令牌=”+
accessToken
)
.渔获物(e=>e);
});
const responses=等待承诺。全部(promisesArray);
var pages={};//{
控制台日志(“测试2”);
var事件={};
让eventList=response.data.data.map(事件=>{
console.log(“事件”+event.id+“”+event.name);
events[event.id]=event.name;
});
const page=pagesResponse.data.data[i];
页面[page.id]=[page.name,事件];
});
这是我的国家({
//您是否希望等待所有这些问题,无论它们是拒绝还是已解决,还是希望它在第一次拒绝时设置状态?您好,无论它们是否已拒绝。请查看我添加的异步,它在第一个getMy问题的回调中丢失,page.id
和page.name
此处不可用:page[page.id]=[page.name,events];
立即尝试。我使用响应循环索引来访问相关页面。请告诉我进展如何。
let accessToken = response.accessToken;
axios
.get(
"https://graph.facebook.com/v5.0/me/accounts?fields=id,name&access_token=" +
response.accessToken
)
.then(async pagesResponse => {
console.log("test");
let promisesArray = pagesResponse.data.data.map(async page => {
console.log("page " + page.id + " " + page.name);
this.setState({
page: response.data.data
});
return axios
.get(
"https://graph.facebook.com/v5.0/" +
page.id +
"/events?access_token=" +
accessToken
)
.catch(e => e);
});
const responses = await Promise.all(promisesArray);
var pages = {}; // <------------ CODE 2
responses.forEach((response, i) => {
console.log("test 2");
var events = {};
let eventList = response.data.data.map(event => {
console.log("event " + event.id + " " + event.name);
events[event.id] = event.name;
});
const page = pagesResponse.data.data[i];
pages[page.id] = [page.name, events];
});
this.setState({
// <------------ CODE 1
pages: pages
});
});