【发布时间】:2021-12-30 21:05:30
【问题描述】:
我的目标:每 X 秒调用一次函数。
我正在使用 Coinbase pro API 并获取我的钱包信息。每秒 API 调用次数有限制。所以我想每 5 秒为每个钱包调用一次我的函数 getWalletHistory()。
我有什么:我的函数 getWalletList() 被调用,然后我等待 5 秒来调用我的函数 getWalletHistory()。
我想要什么:每 5 秒为每个钱包调用一次我的函数 getWalletHistory()。
var wallet_list = [];
getWalletList();
function getWalletList(){
authedClient.getAccounts().then(wallet_list_response => {
wallet_list_response.forEach(async wallet => {
console.log("WALLET LIST:" + wallet.id);
wallet_list.push(wallet);
});
console.log('**********END LOOP WALLET LIST');
getWalletHistory(wallet_list);
}).catch(error => {
// handle the error
console.log('ERROR getAccounts');
//console.log(error);
});
}
const getWalletHistory = async function(wallet_args){
wallet_args.forEach(async wallet => {
setTimeout(function(){
authedClient.getAccountHistory(wallet.id).then(order_list => {
console.log('*********response');
}).catch(error => {
// handle the error
console.log('ERROR getAccountHistory');
//console.log(error);
});
}, 5000);
});
}
更新 根据 Erenn 的评论,我使用 SetInterval 而不是 SetTimeout:
var wallet_list = [];
getWalletList();
function getWalletList(){
authedClient.getAccounts().then(wallet_list_response => {
wallet_list_response.forEach(async wallet => {
console.log("WALLET LIST:" + wallet.id);
setInterval(() => getWalletHistory(wallet), 5000);
});
console.log('**********END LOOP WALLET LIST');
}).catch(error => {
// handle the error
console.log('ERROR getAccounts');
//console.log(error);
});
}
const getWalletHistory = async function(wallet){
console.log('*********getWalletHistory:' + wallet.currency);
authedClient.getAccountHistory(wallet.id).then(order_list => {
console.log('*********response order_list');
}).catch(error => {
// handle the error
console.log('ERROR getAccountHistory');
//console.log(error);
});
}
我现在拥有的:getAccountHistory() 在无限循环中每 5 秒为所有钱包调用一次。我想一次只为 1 个钱包每 5 秒调用一次 getAccountHistory()。
【问题讨论】:
-
我认为你想要 setInterval 而不是 setTimeout。
-
谢谢,我更新了我的帖子。使用 setInterval 时出现新错误
-
因为你是直接执行参数中的函数,所以试试
() => getWalletHistory(wallet) -
没错,我没注意到!现在的问题是函数 getWalletHistory() 被无限次调用。每隔 5 秒,我会为所有钱包调用 getWalletHistory(),我希望它只为 1 个钱包调用我的函数。
标签: javascript node.js api settimeout coinbase-api