我正在使用promise all发送多个promise,但出现此错误
429-{“错误”:{“代码”:“ TooManyRequests”,“消息”:“太多 请求”}}
我有一个数据列表,我按10个一组对数据进行分块,然后为每个通知发送
await Promise.all(usersList.map(usersTokens=> {
return sendPush(heading, content,usersTokens, platform).catch((e) => {
console.error(e)
errors.push({ e, android })
})
}))
发送推送功能
import * as rp from 'request-promise'
export const sendPush = (title="",secondTitle,tokens,platform) => {
let message = {
notification_content : {
name:title,
title : secondTitle,
body : secondTitle,
},
notification_target : {
type : "devices_target",
devices : tokens
},
}
var headers = {
"Content-Type": "application/json; charset=utf-8",
"X-API-Token": 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
};
var options = {
uri: `https://api.appcenter.ms/v0.1/apps/XXXXXXXXXX/${platform}/push/notifications`,
method: "POST",
headers: headers,
body: message,
json: true
}
return rp(options)
}
答案 0 :(得分:1)
我按10个一组对数据进行分块
但是您仍然同时请求所有块。因此,分块的意义不大。而不是使用Promise.all
,而应该在处理下一个块之前使用循环和每个块await
:
const result = [];
for(const userTokens of userList) {
try {
result.push(await sendPush(heading, content,usersTokens, platform));
} catch(e) {
console.error(e)
errors.push({ e, android })
}
}
如果对于API而言仍然太快,则可以delay the loop