gpt4 book ai didi

javascript - 如何在 then() 中获取对当前 Promise 的引用

转载 作者:行者123 更新时间:2023-11-30 15:13:10 26 4
gpt4 key购买 nike

在下面的代码中,我想检查回调是否从 latestRequest 执行,所以我正在检查 thisPromise 看它是否与 latestRequest 相同.显然 thisPromise 不起作用。有没有办法获得当前的Promise?

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 的请求。我只想为最新请求更新数据。这些请求可能需要非常不同的时间才能返回,有时较早的请求会稍后返回并覆盖最新的请求。如果您知道处理此问题的好方法,请告诉我。

最佳答案

闭包中的实现:

const run = (() => {
let currentPromise;

return () => {
const p = new Promise((resolve, reject) => {
// run an asynchronous process and resolve like resolve(results)
})
.then(results => {
if (p === currentPromise) {
// process results here
}
})

currentPromise = p;
}
})()

使用 class 的类似替代方法:

class Request {
static #currentPromise;

static run() {
const p = new Promise((resolve, reject) => {
// run an asynchronous process and resolve like resolve(results)
})
.then(results => {
if (p === Request.#currentPromise) {
// process results here
}
})

Request.#currentPromise = p;
}
}

您可以通过实现模拟延迟来进行测试:

const run = (() => {
let currentPromise;

return (timeout) => {
const p = new Promise((resolve, reject) => {
setTimeout(_ => resolve(timeout), timeout);
})
.then(data => {
if (p === currentPromise) {
console.log('latest request', data);
}
})

currentPromise = p;
}
})()

run(1000); // 1s request
run( 500);
run( 10); // last request, 0.1s

关于javascript - 如何在 then() 中获取对当前 Promise 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com