我已经把一个例子来说明什么,我在得到:如何实现可取消,有序的承诺?
function onInput(ev) {
let term = ev.target.value;
console.log(`searching for "${term}"`);
getSearchResults(term).then(results => {
console.log(`results for "${term}"`,results);
});
}
function getSearchResults(term) {
return new Promise((resolve,reject) => {
let timeout = getRandomIntInclusive(100,2000);
setTimeout(() => {
resolve([term.toLowerCase(), term.toUpperCase()]);
}, timeout);
});
}
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
<input onInput="onInput(event)">
键入“搜索”框,看控制台。搜索结果不合时宜!
当有新的输入并保证结果回来时,我们如何取消任何未决的承诺?
您可能对[debounce function](https://davidwalsh.name/javascript-debounce-function)感兴趣。不通过 – Phil
回答订购问题订单问题是由于您的超时随机化。以后的请求可能会解决之前的请求 – Phil
@Phil是的,我明白*为什么*这是发生,我问问什么是一个好的方法来处理它?随机超时是模拟网络请求可能需要多长时间。 – mpen