我尝试在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);
});
}
答案 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}); }
})
})
};
答案 1 :(得分:0)
您的sendRequestAsync函数应该直接从请求调用返回promise而不是等待它。 Await实际上只是.then()的语法糖。