Probleme mit mehreren Then-Versprechen in angle.js
黄舟
黄舟 2017-05-16 13:20:03
0
2
572
<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?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

Antworte allen(2)
Peter_Zhu
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);
    })
给我你的怀抱

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage