带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析
Posted
技术标签:
【中文标题】带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析【英文标题】:Angularjs $q.all with pre-flight request resolves after OPTIONS request 【发布时间】:2016-06-26 05:58:39 【问题描述】:我有多个删除请求,前面有一个 OPTIONS
飞行前请求。但是在OPTIONS
请求之后,控件进入$q.all
的then。这是我的代码:
companyMasterC.confirmDelete = function(ev, text)
simpleDialog.verifyDelete(ev, text).then(function()
companyMasterC.deletePromise = companyMasterC.deleteSelected().then(function(response)
companyMasterC.getCompanies();
, function(error)
console.log(error);
);
);
;
companyMasterC.deleteSelected = function()
var promises = companyMasterC.selectedRows.map(function(selectedRow)
return company.delete(id:selectedRow.id);
);
return $q.all(promises);
;
下面是“网络”选项卡中发生的情况:首先,执行OPTIONS
请求,然后执行GET
请求companyMasterC.getCompanies();
当DELETE
请求被执行时应该执行。并且在GET
请求DELETE
请求被执行之后。
【问题讨论】:
【参考方案1】:改变
return company.delete(id:selectedRow.id);
到
return company.delete(id:selectedRow.id).$promise;
修改代码:
companyMasterC.confirmDelete = function(ev, text)
simpleDialog.verifyDelete(ev, text).then(function()
companyMasterC.deletePromise = companyMasterC.deleteSelected().then(function(response)
companyMasterC.getCompanies();
, function(error)
console.log(error);
);
);
;
companyMasterC.deleteSelected = function()
var promises = companyMasterC.selectedRows.map(function(selectedRow)
return company.delete(id:selectedRow.id).$promise;
);
return $q.all(promises);
;
【讨论】:
这个问题解决了,但是 company.delete(id:selectedRow.id) 已经是一个承诺。那么为什么要添加 $promise。以上是关于带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析的主要内容,如果未能解决你的问题,请参考以下文章
Rails、REST 架构和 HTML 5:带有飞行前请求的跨域请求