Axios DELETE 调用 CORS 服务器触发 promise resolve on preflight OPTIONS 调用

Axios DELETE call to CORS server triggers promise resolve on preflight OPTIONS call

我有一个带有 CORS 设置的 API 以允许来自特定来源的任何方法和 headers。使用 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 请求,承诺在 OPTIONS 请求后得到解决 returns,而不是等待 DELETE 请求(因此在删除发生之前重新加载数据在服务器上)。

有什么办法可以防止这种情况发生,只解决 DELETE 请求上的承诺吗?

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

你应该 => ajax.deleteAsset(id)=> {return ajax.deleteAsset(id)} 。在您的情况下,您没有 return 地图的承诺,因此您无法同步您的承诺。

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

的数组

下面的代码应该允许您同步删除和 "retrievement"

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

(替代 return)

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