$q.defer() then 的 then
$q.defer() then of the then
我不理解 then
的 return 值的行为,
这里是 documentation -
then(successCallback, errorCallback, notifyCallback) – regardless of
when the promise was or will be resolved or rejected, then calls one
of the success or error callbacks asynchronously as soon as the result
is available. The callbacks are called with a single argument: the
result or rejection reason.
所以让我们尝试一下,根据下面的小代码部分 -
var deferred = $q.defer();
deferred.reject();
deferred.promise.then(function () {
console.log("1st resolove");
},
function () {
console.log("1st reject");
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);
1) 为什么会记录 -
1st reject
2nd resolve
而不是 -
1st reject
2nd reject
?
2) 我必须更改什么才能使其记录 -
1st reject
2nd reject
?
var myAppModule = angular.module('myApp', []).
controller('myCtrl',function($scope,$q){
var deferred = $q.defer();
//deferred.resolve();
deferred.reject();
deferred.promise.then(function () {
console.log("1st resolove");
},
function () {
console.log("1st reject");
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="myCtrl"></div>
</div>
您错过了文档的下一行:
This method returns a new promise which is resolved or rejected via
the return value of the successCallback, errorCallback.
如果您出于任何原因希望下一个链成为相同承诺的结果,请从您的处理程序中 return deferred.promise。
// This will always trigger the reject callback
deferred.promise.then(function () {
console.log("1st resolove");
return deferred.promise;
},
function () {
console.log("1st reject");
return deferred.promise;
}
)
如果您想 return success/failed 回调,具体取决于第一个回调的结果,return $q.when()
在您的成功中和 return $q.reject()
在您的失败中:
deferred.promise.then(function () {
console.log("1st resolove");
return $q.when();
},
function () {
console.log("1st reject");
return $q.reject();
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);
我不理解 then
的 return 值的行为,
这里是 documentation -
then(successCallback, errorCallback, notifyCallback) – regardless of when the promise was or will be resolved or rejected, then calls one of the success or error callbacks asynchronously as soon as the result is available. The callbacks are called with a single argument: the result or rejection reason.
所以让我们尝试一下,根据下面的小代码部分 -
var deferred = $q.defer();
deferred.reject();
deferred.promise.then(function () {
console.log("1st resolove");
},
function () {
console.log("1st reject");
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);
1) 为什么会记录 -
1st reject
2nd resolve
而不是 -
1st reject
2nd reject
?
2) 我必须更改什么才能使其记录 -
1st reject
2nd reject
?
var myAppModule = angular.module('myApp', []).
controller('myCtrl',function($scope,$q){
var deferred = $q.defer();
//deferred.resolve();
deferred.reject();
deferred.promise.then(function () {
console.log("1st resolove");
},
function () {
console.log("1st reject");
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="myCtrl"></div>
</div>
您错过了文档的下一行:
This method returns a new promise which is resolved or rejected via the return value of the successCallback, errorCallback.
如果您出于任何原因希望下一个链成为相同承诺的结果,请从您的处理程序中 return deferred.promise。
// This will always trigger the reject callback
deferred.promise.then(function () {
console.log("1st resolove");
return deferred.promise;
},
function () {
console.log("1st reject");
return deferred.promise;
}
)
如果您想 return success/failed 回调,具体取决于第一个回调的结果,return $q.when()
在您的成功中和 return $q.reject()
在您的失败中:
deferred.promise.then(function () {
console.log("1st resolove");
return $q.when();
},
function () {
console.log("1st reject");
return $q.reject();
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);