suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Probleme mit mehreren Then-Versprechen in angle.js

<p ng-app="MyApp">
  <p ng-controller="MyController">
    <label for="flag">成功
      <input id="flag" type="checkbox" ng-model="flag" /><br/>
    </label>
    <p ng-cloak>
      {{status}}
    </p>
    <hr/>
    <button ng-click="handle()">点击我</button>
  </p>
</p>
<script>
  angular.module("MyApp", [])
    .controller("MyController", ["$scope", "$q", function ($scope, $q) {
      $scope.flag = true;
      $scope.handle = function () {
        var deferred = $q.defer();
        var promise = deferred.promise;

        if ($scope.flag) {
          deferred.resolve("you are lucky!");
        } else {
          deferred.reject("sorry, it lost!");
        }
        promise.then(function (result) {
          result = result + "you have passed the first then()";
          $scope.status = result;
          return result;
        }, function (error) {
          error = error + "failed but you have passed the first then()";
          $scope.status = error;
          return error;
        }).then(function (result) {
          alert("Success: " + result);
        }, function (error) {
          alert("Fail: " + error);
        })
      }
    }]);
</script>

Warum, wenn mein $scope.flag falsch ist, ist das erste dann ein Fehler und das zweite dann ein Erfolg. Wenn ich es ändern möchte, wie kann ich es ändern?

黄舟黄舟2778 Tage vor574

Antworte allen(2)Ich werde antworten

  • 天蓬老师

    天蓬老师2017-05-16 13:22:03

    promise.then(function (result) {
          result = result + "you have passed the first then()";
          $scope.status = result;
          // return result;
          return $q.resolve(result);
        }, function (error) {
          error = error + "failed but you have passed the first then()";
          $scope.status = error;
          // return error;
          return $q.reject(error);
        }).then(function (result) {
          alert("Success: " + result);
        }, function (error) {
          alert("Fail: " + error);
        })

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:22:03

    每个.then都会返回一个新的promise。新的promise执行失败的代码后,会resolve当前传入.then的函数的返回值。因此第二个执行的是success。

    这问题说多了也没用,自己看promise源码,一下就清楚了。

    Antwort
    0
  • StornierenAntwort