2017-06-12 118 views
5

我有一个输入框。用户停止输入后,我想执行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); 

然而,当我在框中键入“做搜索”立即出现的每一个字符 - 我希望它只是出现在500毫秒后已过期。

如何使用去抖动并等待?

回答

5

的问题是,在最后一行:

}), 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>

+1

哦微妙!我认为它通过了linting,所以我没有注意到。谢谢! – mikemaccana