gpt4 book ai didi

javascript - Promise with setTimeout 不返回 json

转载 作者:行者123 更新时间:2023-11-29 23:04:41 32 4
gpt4 key购买 nike

由于电影数据库 API 限制(每 10 秒 40 个请求),我正在请求具有 4 秒冷却时间的 API 的数据。所以,我需要等待 4 秒,直到解决下一个 promise 。

我知道我必须将 setTimeout 包装在 Promise 中,但是如何将响应 url 转换为 json?

我不成功的方法:

const pages_Array = [1, 2, 3, 4, 5];

let getSearchResultsForOnePage = url => {
//fetch
return fetch(url);
};

let pause = time => {
// handy pause function to await
return new Promise(resolve => setTimeout(resolve, time));
};

let getAllSearchResultProfiles = async searchURL => {
let URLs = [];
for (let i = 0; i < pages_Array.length; i++) {
URLs.push(searchURL + pages_Array[i]);
}
console.log(URLs);
let responses = [];
for (url of URLs) {
console.log("sending request");
response = await getSearchResultsForOnePage(url);
console.log("received", response);
console.log(typeof response)
responses.push(response);
await pause(4000);
}

return responses;
};

let getAllIDs = () => {
getAllSearchResultProfiles(mainURL).then(response => {
data = response.json();
console.log(data);
});
};

getAllIDs();

最佳答案

getAllSearchResultProfiles 函数使用 responses 数组进行解析。稍后,您尝试在这个数组上执行 .json(),但这不起作用;您必须对数组中的每个单独项目执行 .json() 。这可能看起来像这样:

getAllSearchResultProfiles(mainURL).then(responses => {
const jsonBodies = responses.map(response => response.json());
});

但由于 .json() 本身会返回一个 promise(即一旦接收到完整的 HTTP 主体并将其解析为 JSON 就会解析的 promise),您可以改用 .json() 来自 getAllSearchResultProfiles 函数。 (否则,您必须使用 Promise.all。)

因此,与其在 for 循环中执行 responses.push(response),不如执行 responses.push(await response.json())。这样,JSON 响应将被直接推送到 responses 数组中,您将能够在 .then() 中按原样使用它:

getAllSearchResultProfiles(mainURL).then(data => {
console.log(data);
});

关于javascript - Promise with setTimeout 不返回 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54992002/

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