gpt4 book ai didi

javascript - 当其中一个获取延迟响应时,如何在 Redux 中进行多次获取操作?

转载 作者:行者123 更新时间:2023-12-03 03:11:34 28 4
gpt4 key购买 nike

我正在考虑如何在 Redux 中实现以下操作:

  1. 第一次提取获取搜索数据及其 ID(API 端点:/searches/:id)
  2. 其响应具有status,可以等于in_progressfinished
  3. 仅当第一个请求的响应等于finished时,我才需要运行第二次提取
  4. 第二次提取采用相同的 ID 并获取下一个数据(API 端点:searches/:id/results)

我对如何执行该操作感到困惑,因为我不知道如何重复第一次获取,直到它得到 status: finish 作为响应。然后才开始下一次获取以获得结果。

这是我尝试的方法(我正在使用 redux-thunk):

export const fetchResults = (id) => (dispatch) => {
return fetch(`/searches/${id}`, {
method: 'get',
headers: { 'Content-Type': 'application/json' }
}
.then(res => res.json())
.then(data => dispatch(fetchUntilFinished(data.id)))
.then(res => {
if (res === true) { // allowed to make next fetch
fetch(`/searches/${id}/results`, {
method: 'get',
headers: { 'Content-Type': 'application/json' }
})
.then(res => res.json())
.then(results => {
dispatch({
type: 'FETCH_RESULTS',
results: results
})
})
}
})

function fetchUntilFinished(id) {
fetch(`/searches/${id}`, {
method: 'get',
headers: { 'Content-Type': 'application/json' }
}
.then(res => res.json())
.then(data => {
if (data.status !=== 'finished') {
fetchUntilFinished(id);
} else {
return true; // to trigger that next fetch can be done
}
})
}

但事实并非如此。我什至不确定我是否正在尝试以正确的方式做这件事。我需要有关如何实现此类行动的帮助或想法。

最佳答案

@Dair 你可以尝试这样的事情:

let interval;
const promise = new Promise((resolve, reject) => {
interval = setInterval(() => {
fetch('your-url').then((response) => {
if (response.status === 'finished') {
clearInterval(interval);
resolve(response);
}
})
}, 1000);
});

promise.then(doYourStuffAfterResponse);

它并不完美,但它给了你一个想法。

关于javascript - 当其中一个获取延迟响应时,如何在 Redux 中进行多次获取操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46929241/

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