我有一个带有 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/