как вызвать действие после каждых 2 минут в реакции с ожиданием - PullRequest
0 голосов
/ 11 марта 2019

Я использую async await для вызова API в реакции. Мой вопрос заключается в том, как я могу вызывать сервис get каждые 2 минуты, потому что в моем случае обещание не решает, что оно занимает время, и показывает состояние ожидания, поэтому я думаю позвонить получать обслуживание каждые 2 минуты, если обещание не выполнено Кто-нибудь может подсказать мне, как я могу сделать это, используя await.

вот мой код, что я сделал.

export function fetchUser(id) {
  return async dispatch => {
    let userUrl = FETCH_USER_URL + id;
    let response1 = await get(userUrl); // I want to call this again if response not getting within a 2 minutes

    if (response1.status === 200) {

       let processUrl = FETCH_PROCESS_USER_URL;
       let response2 = await get(processUrl);
    if (response2.status === 200) {
       console.log("fetch process user success");
    } else {
       console.log("fetch process user failed");
    }
      console.log("success");
    } else {
      console.log("failed");
    }
  };
}

любая помощь оценит. Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Вы можете попробовать это

const timeout = setTimeout(fetchUser(id), 120000);

let response = await get(url);

clearTimeout(timeout);

Редактировать из-за комментария:

export function fetchUser(id) {
  return async dispatch => {
    let url = FETCH_USER_URL + id;
    const timeout = setTimeout(fetchUser(id), 120000); // start 2 min timer that will call the function again in 2 min

    let response = await get(url); // if response not getting within a 2 minutes call again

    clearTimeout(timeout); //remove it if you get a response before 2min


    if (response.status === 200) {

       let url2 = FETCH_PROCESS_USER_URL;
       let response2 = await get(url);
    if (response2.status === 200) {
       console.log("fetch process user success");
    } else {
       console.log("fetch process user failed");
    }
      console.log("success");
    } else {
      console.log("failed");
    }
  };
}
,,,
0 голосов
/ 11 марта 2019

Пожалуйста, попробуйте этот подход.

const NUM_RETRIES = 3;

test();

async function getData() {
  let arr = new Array(NUM_RETRIES).map(() => null);
  arr.forEach(() => {
    try {
      await get('url');
    } catch (err) {}
  });
}
...