在下面的代码中,我想检查回调是否正在从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)
  })

08-24 15:43