亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在成功處理程序之外使用$ http Promise響應

如何在成功處理程序之外使用$ http Promise響應

瀟湘沐 2019-09-27 15:44:36
$scope.tempObject = {}; $http({   method: 'GET',   url: '/myRestUrl'}).then(function successCallback(response) {   $scope.tempObject = response   console.log("Temp Object in successCallback ", $scope.tempObject);}, function errorCallback(response) {});console.log("Temp Object outside $http ", $scope.tempObject);我得到了回應,successCallback但沒有得到$scope.tempObject外界的支持$http。其顯示undefined。如何訪問response或$scope.tempObject之后$http
查看完整描述

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

http://img1.sycdn.imooc.com//5d8dbe0a0001dfc306200280.jpg

“ 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*");


查看完整回答
反對 回復 2019-09-27
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

$ http調用是異步調用?;卣{函數在返回響應后執行。同時,該函數的其余部分繼續執行,并將$ scope.tempObject記錄為{}。解析$ http時,僅設置$ scope.tempObject。Angular將使用兩種方式自動綁定更改的值。


視圖中的{{tempObject}}會自動更新。


如果要在回調后使用tempObject,請執行此操作


then(function(data){

   onSuccess(data);

},function(){


});


function onSuccess(data){

// do something

}


查看完整回答
反對 回復 2019-09-27
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

這意味著如果我們$timeout延遲使用函數,那么它也會獲取完整的數據。例如$timeout(function () { console.log("Temp Object outside $http ", $scope.tempObject); }, 1000)

查看完整回答
反對 回復 2019-09-27
  • 3 回答
  • 0 關注
  • 738 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號