【问题标题】:Promise not updating my variables承诺不更新我的变量
【发布时间】:2016-12-25 16:19:54
【问题描述】:

我的控制器中有一个执行某些任务的功能,其中之一是检查使用我的服务是否某些价格或有效,如果存在任何错误停止执行其余代码,问题是我的变量“错误”没有被更新,基本上在我的承诺中,当出现错误时它会增加错误变量,然后在这种情况下返回任何错误(停止)。但无法弄清楚为什么不更新变量错误。

我的代码:

function apply(){
 var error = 0;
           if(vm.costPrice){

               vm.name="";


               for (var i = 0; i < vm.costPrice.length; i++) {

                       (function (i) {

                           if (isChecked(vm.costPrice[i].id)) {

                           //create later a service that accepts array of data (less requests = better performance)
                           MyService.validateThings(vm.product.pvp, vm.costPrice[i].discount_price)
                               .then(function (response) {

                                   },
                                   function (response) {

                                    error++;
                                       vm.isErrorCostPrice = true;
                                       if (i > 0) {
                                           vm.name += ' ';
                                       }
                                       vm.name += vm.costPrice[i].condition.name;

                                   });

                           }

                           }(i));

                }

                if(error > 0){
                return;
                }

// Other code above...

}

【问题讨论】:

  • 可以稍微格式化一下代码吗?
  • 但是,这是因为 validateThings 是异步运行的,所以你很可能会在错误更新之前命中你的 if 语句。
  • 那么有什么建议可以解决吗?
  • 你要等到所有的承诺都解决后再检查错误。

标签: javascript angularjs angularjs-scope


【解决方案1】:

我猜你的意思是这段代码:

if(error > 0){
    return;
}

error 始终为 0。

由于您有一个带有承诺的 for 循环,该承诺在某些服务之后执行,因此上面的代码会立即运行,而您的承诺将在稍后运行。在检查是否有任何错误之前,您需要确保您的所有承诺都已完成。

您可能可以按照此问题的答案中所述执行操作:angular $q, How to chain multiple promises within and after a for-loop

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多