javascript - 在第 n 个而不是第一个使用 async 和 await ?
问题描述
SyntaxError: await 仅在异步函数和模块的顶层主体中有效
错误准确地显示了问题所在,但是如果我想在 nTH 函数 await 中使用,什么是绕过?
要更清楚。address_submited()
从 html 调用onclick=address_submited()
它读取 wallet_address 并开始按来自 的GET
请求获取数据OpenSea
。根据结果,可能会有多个调用。此函数通过回调解决,因此“它等待”直到它获取所有数据。
现在在 for 循环中获取数据后,它应该为每个成员执行另一个 API 调用。由于提供商限制每分钟 50 次呼叫,我们需要增加一些延迟。这就是为什么我添加了await new Promise(r => setTimeout(r, 2000));
不是它让我回到这个问题上描述的开始:等待仅在异步函数中有效
async function address_submited() {
const wallet_address = $('#wallet_id').val()
start_app(wallet_address, 0, [])
}
function start_app(wallet_id, offset, all_events) {
$.get('https://api.opensea.io/api/v1/events',
{
"account_address": wallet_id,
"only_opensea": "false",
"event_type": "successful",
"offset": offset,
"limit": "50"
}).done(function (return_data) {
all_events = all_events.concat(return_data['asset_events'])
offset += return_data['asset_events'].length
if (return_data['asset_events'].length != 0) {
start_app(wallet_id, offset, all_events)
} else {
read_events(all_events)
}
})
}
function read_events(_all_events) {
Object.entries(_all_events).forEach(item => {
await new Promise(r => setTimeout(r, 2000));
$.get(`https://api.etherscan.io/api?module=proxy&action=eth_getTransactionByHash&txhash=${item[1]["transaction"]["transaction_hash"]}&apikey=${etherscan_api_key}`).
done(function (return_data) {
console.log(return_data)
})
})
}
解决方案
你也可以试试这个。
function read_events(_all_events) {
Object.entries(_all_events).forEach(async (item) => {
await new Promise(r => setTimeout(r, 2000));
$.get(`https://api.etherscan.io/api?module=proxy&action=eth_getTransactionByHash&txhash=${item[1]["transaction"]["transaction_hash"]}&apikey=${etherscan_api_key}`).
done(function (return_data) {
console.log(return_data)
})
})
}
推荐阅读
- android - opencv jni 使用 ndk 构建失败(错误:未定义的引用)
- reactjs - 如何在材质 UI 中的用户图标和用户名之间留出空格?
- python - 如何在python中制作一个二维元组数组?
- javascript - SVG 动画 On 按钮
- android - 在 Fragment 中调用 MainActivity 方法时出现 NullPointerException
- javascript - 如何通过单击按钮或除带有javascript的对象以外的任何位置来隐藏对象?
- x11 - XCB 中是否有任何帧限制回调?
- web - 设置 Web 服务器的推荐方法是什么?
- javascript - 在按钮单击时切换 Vue el-table 中的选择更改
- python-3.x - 按钮元素不可交互