【问题标题】:Angularjs $q.all with pre-flight request resolves after OPTIONS request带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析
【发布时间】: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请求被执行之后。

【问题讨论】:

    标签: angularjs promise angular-promise preflight


    【解决方案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。
    猜你喜欢
    • 2014-12-27
    • 2016-06-28
    • 2018-10-19
    • 1970-01-01
    • 2018-06-18
    • 2023-03-13
    • 2018-04-13
    • 2018-10-25
    • 2011-02-20
    相关资源
    最近更新 更多