在下面的代码中,我想检查回调是否正在从LatestRequest执行,因此我正在检查thisPromise
以查看它是否与latestRequest
相同。显然thisPromise
不起作用。有没有办法获得当前的承诺?
let latestRequest = MyLib
.retrieve(getFilteredQuery(filters, queries, user))
.then(res => {
// Checking whether this is the latest request handler
if (latestRequest === thisPromise) {
updateData(res)
}
})
.catch(err => {
console.error(err)
})
我的用例是处理来自API的请求。我只希望针对最新请求更新数据。请求返回的时间可能非常不同,有时,先前的请求会在稍后返回,并覆盖最新的请求。如果您知道解决此问题的好方法,请告诉我。
最佳答案
没有方法可以从.then
提供的处理程序中获取对已承诺对象.then
的引用。
一种建议是为处理程序分配一个序列号,并从闭包内部检查它是否是最后发布的序列号。未经测试的示例:
let latestRequestId = 0;
let checkLatest = ()=> {
let thisRequest = ++latestRequestId;
return (res=>{
// Checking whether this is the latest request handler
if (latestRequestId === thisRequest) {
updateData(res)
}
})
}
let latestRequest = MyLib
.retrieve(getFilteredQuery(filters, queries, user))
.then(checkLatest())
.catch(err => {
console.error(err)
})