我正在节点上的Twitter监视器上工作,每次我向Twitter api发送请求时,我都会遍历Twitter api键数组,我希望每个循环迭代之间有3秒的延迟,
我尝试使用setTimeout,但这没用
const apiarray = [new twit({
consumer_key: '5435435435435',
consumer_secret: '5435435345345',
access_token: 'tewrt43543354355453',
access_token_secret: '48239478234923047324734'
}),
new twit({
consumer_key: '3213235543254343534543',
consumer_secret: '8768768768678768',
access_token: '765474657765756745',
access_token_secret: '65434563654634643654643'
})]
let counter = 0
let tweet_stay = []
let tweet_info = () => {
apiarray.forEach(function (item) {
item.get('lists/statuses', {slug: 'slughere', owner_screen_name: 'namehere', count: 1, include_rts: false}, (err, data, response) => {
counter ++
console.log(counter)
if (counter == 1) {
tweet_stay.push(data[0].id)
console.log('tweet ID added')
}
}
}
setInterval(tweet_info, 3000)
答案 0 :(得分:1)
您需要将计时器包装在Promise中,以便可以等待它。然后,您可以将tweet_info设为异步函数,并使用包装的计时器来延迟迭代。
请注意,您必须使用for
循环而不是forEach
:
let delay = ms => {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
}
let tweet_info = async () => {
for (let i = 0; i < apiarray.length; i++) {
await delay(3000)
// do something else here
}
}