3 回答

TA貢獻1921條經驗 獲得超9個贊
但是,如果我想在回調后使用$ scope.tempObject,那么該如何使用它。?
您需要鏈從httpPromise。保存httpPromise并將值返回到onFullfilled處理函數。
//save httpPromise for chaining
var httpPromise = $http({
method: 'GET',
url: '/myRestUrl'
}).then(function onFulfilledHandler(response) {
$scope.tempObject = response
console.log("Temp Object in successCallback ", $scope.tempObject);
//return object for chaining
return $scope.tempObject;
});
然后你外面連鎖從httpPromise。
httpPromise.then (function (tempObject) {
console.log("Temp Object outside $http ", tempObject);
});
有關更多信息,請參見《AngularJS $ q服務API參考-鏈接承諾》。
可以創建任何長度的鏈,并且由于一個承諾可以用另一個承諾來解決(這將進一步推遲其解決方案),因此可以在鏈中的任何點暫停/推遲對承諾的解決。這樣就可以實現功能強大的API。1
基于承諾的異步操作的解釋
console.log("Part1");
console.log("Part2");
var promise = $http.get(url);
promise.then(function successHandler(response){
console.log("Part3");
});
console.log("Part4");
PIC
“ Part4”的控制臺日志不必等待數據從服務器返回。XHR 啟動后立即執行?!?Part3”的控制臺日志在成功處理程序函數內部,該函數由$ q服務保留,并在從服務器到達數據并且XHR 完成后調用。
但是,如果我想在回調后使用$ scope.tempObject,那么該如何使用它。?
您需要鏈從httpPromise。保存httpPromise并將值返回到onFullfilled處理函數。
//save httpPromise for chaining
var httpPromise = $http({
method: 'GET',
url: '/myRestUrl'
}).then(function onFulfilledHandler(response) {
$scope.tempObject = response
console.log("Temp Object in successCallback ", $scope.tempObject);
//return object for chaining
return $scope.tempObject;
});
然后你外面連鎖從httpPromise。
httpPromise.then (function (tempObject) {
console.log("Temp Object outside $http ", tempObject);
});
有關更多信息,請參見《AngularJS $ q服務API參考-鏈接承諾》。
可以創建任何長度的鏈,并且由于一個承諾可以用另一個承諾來解決(這將進一步推遲其解決方案),因此可以在鏈中的任何點暫停/推遲對承諾的解決。這樣就可以實現功能強大的API。1
基于承諾的異步操作的解釋
console.log("Part1");
console.log("Part2");
var promise = $http.get(url);
promise.then(function successHandler(response){
console.log("Part3");
});
console.log("Part4");
PIC
“ Part4”的控制臺日志不必等待數據從服務器返回。XHR 啟動后立即執行。“ Part3”的控制臺日志在成功處理程序函數內部,該函數由$ q服務保留,并在從服務器到達數據并且XHR 完成后調用。
console.log("Part 1");
console.log("Part 2");
var promise = new Promise(r=>r());
promise.then(function() {
console.log("Part 3");
});
console.log("Part *4*");

TA貢獻1906條經驗 獲得超10個贊
$ http調用是異步調用?;卣{函數在返回響應后執行。同時,該函數的其余部分繼續執行,并將$ scope.tempObject記錄為{}。解析$ http時,僅設置$ scope.tempObject。Angular將使用兩種方式自動綁定更改的值。
視圖中的{{tempObject}}會自動更新。
如果要在回調后使用tempObject,請執行此操作
then(function(data){
onSuccess(data);
},function(){
});
function onSuccess(data){
// do something
}

TA貢獻1842條經驗 獲得超13個贊
這意味著如果我們$timeout
延遲使用函數,那么它也會獲取完整的數據。例如$timeout(function () { console.log("Temp Object outside $http ", $scope.tempObject); }, 1000)
- 3 回答
- 0 關注
- 738 瀏覽
添加回答
舉報