如何在nodejs中同步发送for循环中的请求?

时间:2018-06-03 17:00:58

标签: node.js for-loop asynchronous request

我尝试在nodejs中使用请求模块在 for循环中制作facebook api请求。但我需要进行循环并请求调用同步。我究竟做错了什么?

    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 :(得分:1)

在ES8 Async / Await中,脚本在继续执行之前等待解析一个promise。

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}); }
    })
  })
};

Try my live example

答案 1 :(得分:0)

您的sendRequestAsync函数应该直接从请求调用返回promise而不是等待它。 Await实际上只是.then()的语法糖。