2 функция асинхронного результата 2. функция для получения, пост - PullRequest
0 голосов
/ 08 ноября 2018

2 функция запускает действие моей кнопки

favorite1 = (id,sender_id) => {

    if(this.state["like"+id]==true){
            this.setState({["like"+id]:false})
        }else{
            this.setState({["like"+id]:true})}


     //async or timeout how run 3-5 second for last result ----> this.favorite2(id,sender_id)
}

функция favour1 - это действие кнопки для стиля, но очень много нажатий очень медленные действия кнопки, я хочу, чтобы через 3 или 5 секунд после запуска был достигнут последний результат.

favorite2 = (id,sender_id) => {

    // get or post process for favorite1 result
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете использовать async-await

async favorite1 = (id,sender_id) => {
         if(this.state["like"+id]==true){
            this.setState({["like"+id]:false})
        }else{
         this.setState({["like"+id]:true}
        }

     //async or timeout how run 3-5 second for last result ----> this.favorite2(id,sender_id)  
     // waits for 5 second
     let result = await favorite2(id,sender_id);

}

favorite2 = (id,sender_id) => {
    setTimeout(function(){

    // get or post process for favorite1 result
    }, 5000); 

}
0 голосов
/ 08 ноября 2018

Просто используйте стандартную функцию de-bounce:

function debounce(func, threshold, execAsap) {
  var timeout = null;
  return function() {
    var obj = this, args = arguments;
    if (timeout) {
      clearTimeout(timeout);
    } else if (execAsap) {
      func.apply(obj, args);
    }
    timeout = window.setTimeout(function() {
      if (!execAsap) {
        func.apply(obj, args);
      }
      timeout = null;
    }, threshold || 200);
  };
};

favorite2D3000 = debounce(favorite2, 3000); // 3000 miliseconds

favorite1 = (id,sender_id) => {
   favorite2D3000(id,sender_id);
}
...