如何使用async / await去抖?

时间:2017-06-12 14:16:35

标签: javascript async-await lodash debounce

我有一个输入框。用户停止输入后,我想执行HTTP请求并等待结果。

Here's a jsbin

由于jsbin上不允许网络请求,我使用了setTimeout()

var log = console.log.bind(console)

var delayedResults = new Promise(function(resolve) {
  setTimeout(function(){
    resolve('Wooo I am the result!')
  }, 3000);
});

document.querySelector('input').addEventListener('input', _.debounce(async function(){
  log('Doing search')
  var result = await delayedResults
  log('Result is', result)
}), 500);

但是,当我在框中输入时,'正在进行搜索'立刻出现每个角色 - 我希望它只在500ms过期后出现。

我如何使用去抖并等待?

1 个答案:

答案 0 :(得分:7)

问题出在最后一行:

}), 500);

在指定时间参数后,您应该关闭debounce函数调用:

}, 500));



var log = console.log.bind(console);

var delayedResults = new Promise(
  function(resolve) {
    setTimeout(function() {
      resolve('Wooo I am the result!');
    }, 3000);
  }
);

document.querySelector('input')
  .addEventListener('keydown', _.debounce(async function() {
    log('Doing search');
    var result = await delayedResults;
    log('Result is', result);
  }, 500));

<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>
<input>
&#13;
&#13;
&#13;