带有飞行前请求的 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 请求后解析的主要内容,如果未能解决你的问题,请参考以下文章