此问题在此处已有答案:
(17个答案)
8个月前关闭。
我有一个异步函数,它等待axios调用完成后再继续,问题是我需要将axios调用的超时设置为半秒,这样我就不会达到shopify API调用限制。
async function processMatchingSchools(customer_metafield_url) {
for (const item of customer_metafield_url) {
await axios.get(item).then((res) => {
for (key in res.data.metafields) {
if (res.data.metafields[key].value === schoolName) {
id_for_each_student.push(shopifyAdmin + "/customers/" + res.data.metafields[key].owner_id + "/metafields.json")
}
}
})
}
console.log("Customer metafields to search", id_for_each_student)
processOwnerIds(id_for_each_student)
}
当我尝试放置setTimeout时,它调用setTimeout并在完成axios调用之前继续。
async function processMatchingSchools(customer_metafield_url) {
for (const item of customer_metafield_url) {
await setTimeout(function(item) {
axios.get(item).then((res) => {
for (key in res.data.metafields) {
if (res.data.metafields[key].value === schoolName) {
id_for_each_student.push(shopifyAdmin + "/customers/" + res.data.metafields[key].owner_id + "/metafields.json")
}
}
})
}, 500)
}
console.log("Customer metafields to search", id_for_each_student)
processOwnerIds(id_for_each_student)
}
有人帮忙吗?
6条答案
按热度按时间bq9c1y661#
await
只适用于承诺。您需要将setTimeout
Package 在承诺中:lpwwtiir2#
setTimeout()
不返回一个Promise
,但是你可以像这样把它 Package 起来。我还稍微清理了一下你的代码的其余部分。ecfsfe2w3#
setTimeout不返回承诺,因此无法进行
await
编辑。您可以创建自己的基于承诺的
setTimeout
并使用它。qjp7pelc4#
创建一个
sleep
函数,返回一个可以使用的promise,如下所示:要在异步函数中使用它:
oyjwcjzk5#
你需要创造新的承诺比如说
然后在调用API之前在代码中使用它
juzqafwq6#
我创建了
setTimeout2
函数,其工作原理与promise相同:因此,总的来说(注意到setTimeout2变更):