Javascript-Axios在for循环中。将当前提取的响应用于提取数据的下一次迭代

Javascript-Axios在for循环中。将当前提取的响应用于提取数据的下一次迭代,javascript,async-await,Javascript,Async Await,在第一次迭代中,我使用变量previous_epoch在今天之前获取reddit帖子。下一次迭代前一个_历元必须包含响应数据中的日期。奇怪的是,在前两个循环之后,日期没有改变 const getposts = async(user) => { var dataArray = []; var utc = new Date() .toJSON() .slice(0, 10) .replace(/-/g, "/"); var previous

在第一次迭代中,我使用变量previous_epoch在今天之前获取reddit帖子。下一次迭代前一个_历元必须包含响应数据中的日期。奇怪的是,在前两个循环之后,日期没有改变

const getposts = async(user) => {
    var dataArray = [];
    var utc = new Date()
      .toJSON()
      .slice(0, 10)
      .replace(/-/g, "/");

var previous_epoch;


  for(let i=0; i <=5; i++) {
    if(i == 0) {
        console.log('i is 0');
        previous_epoch = new Date(utc).getTime() / 1000;
        console.log('p',previous_epoch); <--keeps doesn't work after second loop
    } 
    else {
        // console.log('else',dataArray);
        previous_epoch = dataArray[dataArray.length-1].created_utc
        console.log('else',previous_epoch);
    }
    await getdat(user,previous_epoch).then((resp) => {
        let jsondat = resp.data.data;
                dataArray = jsondat.concat(dataArray);
    })
  }
  // console.log( dataArray);
  var result = _.map( dataArray, function( o ) {
      return o.id;
  });
/* console.log("%j",result); */
}
这是你的电话号码

编辑2: 我更改了逻辑,以便从getdat函数本身获取下一个日期

const getdat = (user,epoch) => {
    let res= {};
    const sub_url = `https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=300&sort=desc&before=${epoch}`;
    console.log('elZK',sub_url);
  return new Promise((resolve, reject) => {
    axios.get(sub_url)
    .then(response => {
        let d = response.data.data;
        let e = d[d.length - 1].created_utc;
        console.log('e',e);
        res.data = d;
        res.epoch = e;
      return resolve(res)
    })
    .catch(error => {
      return reject(error.message)
    })
  })
}



export const getUserPosts = async(user) => {
    var dataArray = [];
    var utc = new Date()
      .toJSON()
      .slice(0, 10)
      .replace(/-/g, "/");

var previous_epoch;
var epoch;

for(let i=0; i <=5; i++) {
    if(dataArray.length === 0) {
        console.log('i is 0');
        previous_epoch = new Date(utc).getTime() / 1000;
        console.log('p',previous_epoch);
    } 
    else {
        // console.log('else',dataArray);
        previous_epoch = epoch;
        console.log('else',previous_epoch);
    }
    const resp = await getdat(user,previous_epoch);
    const jsondat = resp.data;
    dataArray = jsondat.concat(dataArray);  
    epoch = resp.epoch;      
  }
  // console.log( dataArray);
  var result = _.map( dataArray, function( o ) {
      return o.id;
  });
console.log("%j",result);
}
const getdat=(用户,历元)=>{
设res={};
const sub_url=`https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=300&sort=desc&before=${epoch}`;
log('elZK',sub_url);
返回新承诺((解决、拒绝)=>{
获取(子url)
。然后(响应=>{
设d=response.data.data;
设e=d[d.length-1]。已创建\u utc;
console.log('e',e);
res.data=d;
res.epoch=e;
返回解析(res)
})
.catch(错误=>{
返回拒绝(错误消息)
})
})
}
export const getUserPosts=async(用户)=>{
var dataArray=[];
var utc=新日期()
.toJSON()
.切片(0,10)
.替换(/-/g,“/”);
var前_期;
var时代;

对于(让i=0;i在第一次迭代中,您在今天之前获取帖子,所以结果中的最后一篇帖子将在今天之前创建_utc或等于今天。下一次迭代只需重复您的第一个请求

试试这个代码

for(let i=0; i <=5; i++) {
    if(dataArray.length === 0) {
        console.log('i is 0');
        previous_epoch = new Date(utc).getTime() / 1000;
        console.log('p',previous_epoch);
    } 
    else {
        // console.log('else',dataArray);
        previous_epoch = dataArray[0].created_utc
        console.log('else',previous_epoch);
    }
    const resp = await getdat(user,previous_epoch);
    const jsondat = resp.data.data;
    dataArray = jsondat.concat(dataArray);        
  }
const getdat = (user,epoch) => {    
    const sub_url = `https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=10&sort=desc&before=${epoch}`;
    console.log('elZK',sub_url);
    return axios.get(sub_url);
};

const getposts = async(user) => {
    let dataArray = []; 
    let previous_epoch;

    for(let i=0; i <=5; i++) {
     previous_epoch = dataArray.length>0 ? dataArray[dataArray.length-1].created_utc-1 : Math.floor(Date.now()/1000);
      const result =  await getdat(user,previous_epoch);  
      dataArray = dataArray.concat(result.data.data);
    }

    console.log(dataArray.map(e => e.created_utc));
};

getposts('data');

for(让i=0;i在第一次迭代中,您在今天之前获取帖子,所以结果中的最后一篇帖子将在今天之前创建_utc或与之相等。下一次迭代只需重复您的第一个请求即可

试试这个代码

for(let i=0; i <=5; i++) {
    if(dataArray.length === 0) {
        console.log('i is 0');
        previous_epoch = new Date(utc).getTime() / 1000;
        console.log('p',previous_epoch);
    } 
    else {
        // console.log('else',dataArray);
        previous_epoch = dataArray[0].created_utc
        console.log('else',previous_epoch);
    }
    const resp = await getdat(user,previous_epoch);
    const jsondat = resp.data.data;
    dataArray = jsondat.concat(dataArray);        
  }
const getdat = (user,epoch) => {    
    const sub_url = `https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=10&sort=desc&before=${epoch}`;
    console.log('elZK',sub_url);
    return axios.get(sub_url);
};

const getposts = async(user) => {
    let dataArray = []; 
    let previous_epoch;

    for(let i=0; i <=5; i++) {
     previous_epoch = dataArray.length>0 ? dataArray[dataArray.length-1].created_utc-1 : Math.floor(Date.now()/1000);
      const result =  await getdat(user,previous_epoch);  
      dataArray = dataArray.concat(result.data.data);
    }

    console.log(dataArray.map(e => e.created_utc));
};

getposts('data');
for(让i=0;i试试这个代码

for(let i=0; i <=5; i++) {
    if(dataArray.length === 0) {
        console.log('i is 0');
        previous_epoch = new Date(utc).getTime() / 1000;
        console.log('p',previous_epoch);
    } 
    else {
        // console.log('else',dataArray);
        previous_epoch = dataArray[0].created_utc
        console.log('else',previous_epoch);
    }
    const resp = await getdat(user,previous_epoch);
    const jsondat = resp.data.data;
    dataArray = jsondat.concat(dataArray);        
  }
const getdat = (user,epoch) => {    
    const sub_url = `https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=10&sort=desc&before=${epoch}`;
    console.log('elZK',sub_url);
    return axios.get(sub_url);
};

const getposts = async(user) => {
    let dataArray = []; 
    let previous_epoch;

    for(let i=0; i <=5; i++) {
     previous_epoch = dataArray.length>0 ? dataArray[dataArray.length-1].created_utc-1 : Math.floor(Date.now()/1000);
      const result =  await getdat(user,previous_epoch);  
      dataArray = dataArray.concat(result.data.data);
    }

    console.log(dataArray.map(e => e.created_utc));
};

getposts('data');
const getdat=(用户,历元)=>{
const sub_url=`https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=10&sort=desc&before=${epoch}`;
log('elZK',sub_url);
返回axios.get(sub_url);
};
const getposts=async(用户)=>{
让dataArray=[];
让前一个时代;
for(设i=0;i 0?dataArray[dataArray.length-1]。已创建\u utc-1:Math.floor(Date.now()/1000);
const result=wait getdat(用户,上一个历元);
dataArray=dataArray.concat(result.data.data);
}
log(dataArray.map(e=>e.created_utc));
};
getposts(“数据”);
试试这段代码

for(let i=0; i <=5; i++) {
    if(dataArray.length === 0) {
        console.log('i is 0');
        previous_epoch = new Date(utc).getTime() / 1000;
        console.log('p',previous_epoch);
    } 
    else {
        // console.log('else',dataArray);
        previous_epoch = dataArray[0].created_utc
        console.log('else',previous_epoch);
    }
    const resp = await getdat(user,previous_epoch);
    const jsondat = resp.data.data;
    dataArray = jsondat.concat(dataArray);        
  }
const getdat = (user,epoch) => {    
    const sub_url = `https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=10&sort=desc&before=${epoch}`;
    console.log('elZK',sub_url);
    return axios.get(sub_url);
};

const getposts = async(user) => {
    let dataArray = []; 
    let previous_epoch;

    for(let i=0; i <=5; i++) {
     previous_epoch = dataArray.length>0 ? dataArray[dataArray.length-1].created_utc-1 : Math.floor(Date.now()/1000);
      const result =  await getdat(user,previous_epoch);  
      dataArray = dataArray.concat(result.data.data);
    }

    console.log(dataArray.map(e => e.created_utc));
};

getposts('data');
const getdat=(用户,历元)=>{
const sub_url=`https://api.pushshift.io/reddit/search/submission/?subreddit=${user}&limit=10&sort=desc&before=${epoch}`;
log('elZK',sub_url);
返回axios.get(sub_url);
};
const getposts=async(用户)=>{
让dataArray=[];
让前一个时代;
for(设i=0;i 0?dataArray[dataArray.length-1]。已创建\u utc-1:Math.floor(Date.now()/1000);
const result=wait getdat(用户,上一个历元);
dataArray=dataArray.concat(result.data.data);
}
log(dataArray.map(e=>e.created_utc));
};
getposts(“数据”);

不支持dataArray[0].created_utc获取第一个项目的日期,而不是最后一个项目的日期?此示例仅将时间戳向后移动-从现在移到过去。我不知道您想要什么。我的想法是将上一个_utc日期的正确值放入。返回的帖子按日期进行详细排序。因此,将最后一个项目的日期设置是否也移到过去?出于某种原因,我得到了重复如果我要复制此项,则不会复制dataArray[0].created_utc获取第一个项目的日期,而不是最后一个项目的日期?此示例仅将时间戳向后移动-从现在移到过去。我不知道您想要什么。我的想法是将上一个_utc日期的正确值放入。返回的帖子按日期进行详细排序。因此,将最后一个项目的日期设置是否也移到过去?出于某种原因,我得到了重复我想复制这个。谢谢你的帮助。我已经更改了代码,以便getdat()函数传递下一次迭代的日期,这对我来说是有效的。谢谢你的帮助。我已经更改了代码,以便getdat()函数传递下一次迭代的日期,这对我来说是有效的。