2017-06-12 43 views
5

Mam pole wprowadzania. Po tym, jak użytkownik przestał pisać, chcę wykonać żądanie HTTP i czekać na wyniki.Jak mogę zrezygnować z używania async/await?

Here's a jsbin

Ponieważ żądania sieciowe nie są akceptowane na jsbin Używałem setTimeout() zamiast.

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); 

Jednak po wpisaniu w polu „Doing wyszukiwanie” pojawia się natychmiast każdą postacią - Chcę go tylko pojawiają się po 500ms wygasła.

Jak mogę użyć odbicia i czekać?

Odpowiedz

5

Problem był w ostatnim wierszu:

}), 500); 

Należy zamknąć debounce funkcji połączenia po argumentem czas został określony:

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

Ooh subtelny! Myślę, że minęło linting, więc nie zauważyłem. Dziękuję Ci! – mikemaccana