承诺所有返回错误的请求过多

时间:2018-07-05 07:08:07

标签: javascript node.js promise request request-promise

我正在使用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)

}

1 个答案:

答案 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