javascript - 获取 API 直到没有数据
javascript - Fetch API until there is no data
我正在使用 restful API,我需要 post 一些数据。
但在此之前,我需要确保 table 为空。我遇到的问题是这个APIreturn的delete方法成功了,但是并没有立即删除数据,这个数据被发送到队列中尽快删除。
所以在我调用post方法之前,我需要检查这个table上是否有任何物品。怎么多次调用这个方法才能保证post方法只在table为空的时候执行?
async function run() {
apiDelete()
.then(() => console.log('deleting'))
.then(() => {
getItems().
then(() => {
apiPost()
.then(() => console.log('posting...'))
.catch(e => console.log(e))
})
})
.catch(e => console.log(e))
return
}
方法:
async function apiPost() {
const url = 'https://apipost.com/data/v2/1234'
const options = {
method: 'POST'
}
return (await fetch(url, options)).json()
}
async function apiDelete() {
const url = 'https://apidelete.com/data/v2/all'
const options = {
method: 'DELETE',
}
return (await fetch(url, options)).json()
}
async function getItems() {
const url = 'https://apiget.com/data/v2/all'
const options = {
method: 'GET',
}
return (await fetch(url, options)).json()
}
你需要做一个递归调用,退出条件是当元素个数为0时退出。
一种方法可能是这样的:
async function deleteUntilEmpty() {
await apiDelete();
const items = await getItems();
if (items.length) {
return deleteUntilEmpty();
}
}
async function run() {
await deleteUntilEmpty();
apiPost()
.then(() => console.log("posting..."))
.catch((e) => console.log(e));
}
与其不断删除,还不如轮询一下服务器是否完成了原来的删除:
async function pollUntilEmpty() {
const items = await getItems();
if (items.length) {
// this could be a good spot to introduce some kind of
// sleep to not DDOS your server ;)
return pollUntilEmpty();
}
}
async function deleteAndPollUntilEmpty() {
await apiDelete();
await pollUntilEmpty();
}
async function run() {
await deleteAndPollUntilEmpty();
apiPost()
.then(() => console.log("posting..."))
.catch((e) => console.log(e));
}
我正在使用 restful API,我需要 post 一些数据。 但在此之前,我需要确保 table 为空。我遇到的问题是这个APIreturn的delete方法成功了,但是并没有立即删除数据,这个数据被发送到队列中尽快删除。
所以在我调用post方法之前,我需要检查这个table上是否有任何物品。怎么多次调用这个方法才能保证post方法只在table为空的时候执行?
async function run() {
apiDelete()
.then(() => console.log('deleting'))
.then(() => {
getItems().
then(() => {
apiPost()
.then(() => console.log('posting...'))
.catch(e => console.log(e))
})
})
.catch(e => console.log(e))
return
}
方法:
async function apiPost() {
const url = 'https://apipost.com/data/v2/1234'
const options = {
method: 'POST'
}
return (await fetch(url, options)).json()
}
async function apiDelete() {
const url = 'https://apidelete.com/data/v2/all'
const options = {
method: 'DELETE',
}
return (await fetch(url, options)).json()
}
async function getItems() {
const url = 'https://apiget.com/data/v2/all'
const options = {
method: 'GET',
}
return (await fetch(url, options)).json()
}
你需要做一个递归调用,退出条件是当元素个数为0时退出。
一种方法可能是这样的:
async function deleteUntilEmpty() {
await apiDelete();
const items = await getItems();
if (items.length) {
return deleteUntilEmpty();
}
}
async function run() {
await deleteUntilEmpty();
apiPost()
.then(() => console.log("posting..."))
.catch((e) => console.log(e));
}
与其不断删除,还不如轮询一下服务器是否完成了原来的删除:
async function pollUntilEmpty() {
const items = await getItems();
if (items.length) {
// this could be a good spot to introduce some kind of
// sleep to not DDOS your server ;)
return pollUntilEmpty();
}
}
async function deleteAndPollUntilEmpty() {
await apiDelete();
await pollUntilEmpty();
}
async function run() {
await deleteAndPollUntilEmpty();
apiPost()
.then(() => console.log("posting..."))
.catch((e) => console.log(e));
}