使用异步和等待在第n而不是第一个?



SyntaxError: await只在异步函数和模块的顶层体中有效

错误显示了问题所在,但是如果我想在第n个函数await中使用,那么旁路是什么?

更清楚。address_submited()从htmlonclick=address_submited()

调用读取wallet_address,并根据GET请求从OpenSea获取数据。根据结果可能会有多个调用。这个函数是通过回调来解决的,所以'它等待'直到它获取所有数据。

一旦在for循环中获得数据,它应该对每个成员进行另一次API调用。由于供应商限制每分钟50个电话,我们需要添加一些延迟。这就是为什么我添加了await new Promise(r => setTimeout(r, 2000));

不,它返回我回到这个问题所描述的开始:await只在async函数

中有效
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)
}) 
})
}

最新更新