Как перебирать каждый элемент в цикле с задержкой в ​​узле js - PullRequest
0 голосов
/ 11 октября 2019

Я работаю над твиттер-монитором в узле, и каждый раз, когда я отправляю запрос в твиттер-интерфейс, я перебираю массив твиттер-ключей 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)

1 Ответ

1 голос
/ 11 октября 2019

Вам нужно будет завернуть таймер в обещание, чтобы его можно было ждать. Затем вы можете сделать 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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...