javascript - promise 所有返回错误太多请求

标签 javascript node.js promise request request-promise

我使用 Promise all 发送多个 Promise,但收到此错误

429 - {"error":{"code":"TooManyRequests","message":"Too many requests"}}

我有数据列表,我将数据按 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)

}

最佳答案

I chunk data by group of 10

但是您仍然同时请求所有 block 。因此分块的意义不大。您应该使用循环并在处理下一个 block 之前await每个 block ,而不是使用Promise.all:

 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

关于javascript - promise 所有返回错误太多请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51185243/

相关文章:

javascript - Phonegap/Cordova 更改单个声音的音量?

javascript - Angular 表达式不适用于 html

javascript - 无法将 blob 上传到 Node js 后端

node.js - mongodb聚合过滤器用于字段大于或等于数字的记录

javascript - 在 Node.js 中使用 forEach 循环 Promise All

angularjs - $q.all 和创建新对象在 View 中不起作用

javascript - Promise.all 不等待 firestore 查询循环

php - 自动填写表单并提交不会将参数获取到服务器

javascript - 从 Controller 以编程方式更改 ngModel 值

node.js - 如何使用 jasmine-node 对非模块进行单元测试? (与关闭 Electron 中的 Node 集成有关)