迭代 Promise 真的能运行它们吗?

问题描述 投票:0回答:1

与同事一起使用

googleapis
库时,我偶然发现了这个错误:

Uncaught GaxiosError Error: request to <gmail api url> failed, reason: connect EMFILE <xxx.xxx.xx.xxx:xxx> - Local (undefined:undefined)
    at _request (/gmail-api/node_modules/gaxios/build/src/gaxios.js:149:19)
    at processTicksAndRejections (<node_internals>/internal/process/task_queues:95:5)
gaxios.js:149
Process exited with code 1

仅当我尝试生成要与Promise.all一起使用的承诺列表时,才会发生

const promises = emailList.map((email) => { return this.gmailApi.users.messages.get({ userId: 'me', id: email.id, }) }) const resolvedPromises = await Promise.all(promises)
但是,如果我只手动执行前 10 个承诺,而不将每个承诺映射到我的 

promises

 变量,那么它就会起作用。看来它只会在我用 
.map
 迭代每个承诺之后才会导致错误...我的问题是:为什么会发生这种情况? Node 在幕后做什么?

javascript node.js typescript promise
1个回答
0
投票
尝试下面的代码。我对您的代码做了一些细微的更改并处理了一些错误。

我想知道 .get() 是一个调用其他 api 的方法吗?然后您可以使用 axios 包通过传递所有身份验证令牌等来获取数据。

const fetchUserData = async (emailId) => { try{ let data = await this.gmailApi.users.messages.get({ userId: 'me', id: emailId, }) return data } catch(error){ console.log(error) return {} } }; const userPromises = emailList.map(fetchUserData); Promise.allSettled(userPromises) .then((users) => { console.log(users); }) .catch((error) => { console.error(error); });

© www.soinside.com 2019 - 2024. All rights reserved.