Как мне написать сценарий, который продолжает перезагружаться и делать запросы к конечной точке, пока не будет добавлен конкретный элемент c - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь написать сценарий, который постоянно делает запросы к конечной точке, пока определенный элемент, который я ищу, не будет добавлен в список, расположенный в этой конечной точке. До сих пор я обещал, что после решения вернет этот элемент - я надеюсь, что это произойдет. Однако, если это не так и обещание отклонено, мне нужно иметь возможность перезапустить скрипт. Как мне это сделать? Это рекурсивная вещь? Кто-нибудь может помочь?

const search = (color)=>{

     let promise = new Promise(function(resolve, reject) {

         const info = (products) => {                        
                    let arr = []
                     products.map( p => {
                            if (p.color == `${color}`){ 
                            arr.push(p)

                            }
                         }) 
                      arr.length > 0?  resolve(arr[0]):reject("failed")

                }


///api call makes a request that returns all items in the "hats" section 
        const getProducts =  api.getItems("hats", info)


       promise.then(
        res => console.log(res),
        rej=> console.log(rej) 
        )
}

async function trySearch(color)  {
   while (true) {
      try {
         return  await search(color);
      } catch (err) {

        await new Promise(resolve => setTimeout(resolve, 500));
      }


   }
}

trySearch('Gold')

1 Ответ

0 голосов
/ 30 мая 2020

Вы можете легко оставить свою функцию как есть и отклонить ее с какой-нибудь допустимой ошибкой. Тогда легко извлечь метод повтора поверх этого

const trySearch = async color => {
   while (true) {
      try {
        return await search(color);
      } catch (err) {
        //wait for 0.5s before another attempt, or your computer will cook
        await new Promise(resolve => setTimeout(resolve, 500));
      }
   }
};
...