javascript - Axios DELETE 对 CORS 服务器的调用触发 promise 在预检 OPTIONS 调用上解决

标签 javascript cors axios es6-promise preflight

我有一个带有 CORS 设置的 API,允许来自特定来源的任何方法和 header 。使用 axios,我尝试对服务器进行并发 DELETE 调用,然后在完成所有删除调用后重新加载所有数据,例如

//module ajax;
const deleteAsset = function(id) {
    return axios.delete('/api/Asset/' + id);
};

const getAllAssets = function() {
    return axios.get('/api/Asset/');
};


//module data
...
Promise.all(ids.map(id => { ajax.deleteAsset(id); }))
    .then(() => { ajax.getAllAssets(); });

我发现的问题是,由于预检 OPTIONS 请求, promise 在 OPTIONS 请求返回后解决,而不是等待 DELETE 请求(因此在服务器上发生删除之前重新加载数据)。

有什么方法可以防止这种情况发生并仅解决 DELETE 请求上的 promise 吗?

最佳答案

您对选项的解释不正确。不同步是因为您的代码。

您应该 => ajax.deleteAsset(id)=> {return ajax.deleteAsset(id)} 。在您的情况下,您不会返回 map 的 promise ,因此您无法同步您的 promise 。

您可以console.log下面的dfds来验证它确实是一个包含Promise的数组(而不是undefined)

下面的代码应该允许您同步删除和“检索”

const dfds = ids.map(id => ajax.deleteAsset(id))
return Promise.all(dfds).then(_ => ajax.getAllAssets())

(带回车的替代方案)

const dfds = ids.map(id => { return ajax.deleteAsset(id) })
return Promise.all(dfds).then(_ => { return ajax.getAllAssets() })

关于javascript - Axios DELETE 对 CORS 服务器的调用触发 promise 在预检 OPTIONS 调用上解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054904/

相关文章:

javascript - 如何拦截浏览器发出的 HTTP OPTIONS 调用

node.js - Axios 和 Node - EBAY API 上输出数据的问题

javascript - 如何在axios post请求发送的php中检索变量

javascript - html 下拉列表将我带到错误的网址

javascript - 当 API 不允许 Access-Control-Allow-Origin 时该怎么办

javascript - 非数字的位运算

angularjs - Spring 服务器中 OAuth 身份验证的 CORS 失败

amazon-web-services - 无法在aws lambda函数中调用外部api

javascript - 通过 CSS3 或 JS 或 jquery 帮助过渡效果

javascript - KnockoutJS 复选框列表不绑定(bind)所选值