与同事一起使用
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 在幕后做什么?
我想知道 .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);
});