Как синхронно отправлять запросы в цикле for в nodejs? - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь сделать API-запросы facebook в цикле for , используя модуль request в nodejs.Но мне нужно сделать цикл и запросить вызовы синхронными .Что я делаю неправильно?

    async function sendRequestAsync(sender, messageData) {
        await request({
            url: "https://graph.facebook.com/v2.6/me/messages",
            qs: {access_token: PAGE_ACCESS_TOKEN},
            method: "POST",
            json: {
                recipient: {id: sender},
                message: messageData
            }
        });
     }

     function sendFoods (sender, results) {
         results.forEach(async result => {
             await request.sendRequestasync(sender, {text: result.cat});
             await request.sendRequestasync(sender, result.data);
             console.log(result);
         });
    }

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

В ES8 Async / Await сценарий ожидает разрешения обещания, прежде чем продолжить выполнение.

async function test() {
  for (let i = 0; i < 5; i++) {
    let result = await req('http://google.com');
    console.log(result.resp.statusCode, i);
  };
};

function req(url) {
  return new Promise(function(resolve, reject) {
    request.get(url, function(err, resp, body) {
      if (err) { reject(err); }
      else { resolve({resp: resp, body: body}); }
    })
  })
};

Попробуйте мой живой пример

0 голосов
/ 03 июня 2018

Ваша функция sendRequestAsync должна просто возвращать обещание непосредственно из вызова запроса, а не ожидать его.Await - это просто синтаксический сахар для .then ().

...