async function getData() {
const getProject = await axios.get('url', {
auth: {
username: 'username',
password: 'pw'
}
});
const projects = getProject.data.value;
const promises = projects.map(project =>
axios.get(`url`, {
auth: {
username: 'username',
password: 'pw'
}
})
);
const results = await axios.all(promises)
const KPIs = results.map(v => v.data.value);
}
我想做的是:
获取axios调用以获取项目名称。
使用这些获取的名称来调用多个axios调用。这应该可以为我提供该项目的一些数据。
当我进行第二次axios调用时,由于该项目中不存在数据,一些API调用将无法工作。这是有意的。但是它会由于给我404错误而中断,并且不会到达const results = await axios.all(promises)
行。
我希望它在不存在时跳过它,仅从存在的那个调用它,并将获取的数据存储到KPIs
中。我该怎么办?
编辑
第一个axios调用返回一个对象数组
ex)
{id: "id...", name: "Javelin", url: " .visualstudio.com/_apis/projects/6a93eab2-4996-4d02-8a14-767f02d94993", state: "wellFormed", revision: 99, …}
类似的东西。因此,我实际上只是获得该对象的.name
并将其放入我的url中,例如:
axios.get({id}.extmgmt.visualstudio.com/_apis/ExtensionManagement/InstalledExtensions/{id}/..../${project.name}_test/Documents
答案 0 :(得分:1)
这会将呼叫包装在不会失败的承诺中。
您还需要考虑可能要过滤掉空响应的情况。
async function getData() {
const getProject = await axios.get('url', {
auth: {
username: 'username',
password: 'pw'
}
});
const projects = getProject.data.value;
const promises = projects.map(fallible);
const results = await axios.all(promises)
const KPIs = results.filter(v => v).map(v => v.data.value);
}
function fallibleCall(project) {
return new Promise((resolve, reject) => {
axios.get(`url`, {
auth: {
username: 'username',
password: 'pw'
}
}).then(resolve).catch(resolve);
})
}
答案 1 :(得分:1)
如果问题在于获取项目数据,您只需要处理在那里发生的错误,一种方法就是简单地捕获错误并返回null
。
const promises = projects.map(project =>
axios.get(`url`, {
auth: {
username: 'username',
password: 'pw'
}
}).catch(err => {
return null;
})
);
答案 2 :(得分:1)
您可以通过自己处理404
个响应来轻松解决此问题,并继续拒绝所有其他错误,如下所示:
const promises = projects.map(project =>
axios.get(`url`, {
auth: {
username: 'username',
password: 'pw'
}
}).catch(err => {
if (err.response.status === 404) {
return null; // or an empty array or whatever you want
}
throw err;
});
);