【发布时间】:2021-01-13 00:51:24
【问题描述】:
我有一个函数,它接受一个字符串和一个路径值,并检查结果中的路径是返回 1 还是返回 -1。我用多个请求触发了这个函数,除了一个请求之外,一切似乎都成功了。例如,如果我用 10 个不同的 URL 连续调用函数(一个接一个,而不是在一个数组中),则 promise 被解析为 9 而不是第 10 个。
这是我的代码:
enum Status {
Queued = 0,
Started = 1,
Finished = 2,
Failed = -1,
}
let dataFetchingTimer: number;
export const getDataAtIntervals = (url: string, path: string): Promise<any> => {
clearTimeout(dataFetchingTimer);
return new Promise<any>((resolve: Function, reject: Function): void => {
try {
(async function loop() {
const result = await API.load(url);
console.log(`${url} - ${JSON.stringify(result)}`)
if (
get(result, path) &&
(get(result, path) === Status.Finished ||
get(result, path) === Status.Failed)
) {
return resolve(result); // Resolve with the data
}
dataFetchingTimer = window.setTimeout(loop, 2500);
})();
} catch (e) {
reject(e);
}
});
};
export const clearGetDataAtIntervals = () => clearTimeout(dataFetchingTimer);
请指教。在上图中,4535 只被调用了一次。并且在返回 2 或 -1 之前不会被调用。
【问题讨论】:
-
不能运行就不好说,但我猜这与共享相同
dataFetchingTimer变量的所有请求有关。目前尚不清楚您如何称呼它,或者您的输出对应于什么 -
我称之为 const result = await getDataAtIntervals(url, “status”)。 Setstate(oldState=> {return {data: {...oldState.data, result}}})
-
我可以创建多个 settimeout 吗?
-
我想是的。我不习惯 Typescript,所以我使用了 JS,但这可能会让你想到一些可能的事情:jsfiddle.net/gx3t8d0e
-
@blex 谢谢。将尝试并让您知道
标签: javascript typescript promise async-await settimeout