日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

angular.js - angularjs $q的promise 怎么解決嵌套的ajax問題?

瀏覽:364日期:2024-10-01 11:41:10

問題描述

問題一:我需要用第一次發送ajax請求回的數據作為第二次ajax的參數,而第二次的ajax是在第一次ajax的回調函數里發送的。但是這里有問題!就是第二次ajax返回的數據不能賦值給全局對象的屬性,不知道是不是掉到坑里了。所以想用$q解決。問題二:那這個例子來說吧,// $q 是內置服務,所以可以直接使用 ngApp.factory(’UserInfo’, [’$http’, ’$q’, function ($http, $q) { return {

query : function() { var deferred = $q.defer(); // 聲明延后執行,表示要去監控后面的執行 $http({method: ’GET’, url: ’scripts/mine.json’}). success(function(data, status, headers, config) { deferred.resolve(data); // 聲明執行成功,即http請求數據成功,可以返回數據了 }). error(function(data, status, headers, config) { deferred.reject(data); // 聲明執行失敗,即服務器返回錯誤 }); return deferred.promise; // 返回承諾,這里并不是最終數據,而是訪問最終數據的API } // end query

}; }]); deferred.resolve 是為了延遲執行嗎?那如果能在回調函數里面寫邏輯為什么還要多此一舉的延遲執行呢?問題三:為什么說deferred.promise返回的承諾是最終數據api?這個promise的作用是什么?問題四:promise.then執行邏輯是什么?

問題解答

回答1:

在回答你所有的問題之前,我先對你的示例代碼做些簡單說明!!

你的示例代碼是一個典型的Promise的反面教材,其特征就是:無目的的創建deferred對象,徒增代碼復雜度。關于這點,可以看這里anti-pattern:

angular.js - angularjs $q的promise 怎么解決嵌套的ajax問題?

糾正問題之后,我們再來回頭談你的問題。

首先,當你意識到自己正在忍受callback hell的時候,恭喜你,在javascript這條路上,你算上道兒了。那么解決之道有哪些呢?我們最近常見的有:

Promise

generator配合co

async/await

關于這幾種方式的詳細介紹,我沒仔細翻別人的答案(或許有更好的),只能把自己之前寫的貼出來javascript里的異步

OK,介紹了解決callback hell的幾種常見方式,再回頭來說你的Promise問題

問題一:我需要用第一次發送ajax請求回的數據作為第二次ajax的參數,而第二次的ajax是在第一次ajax的回調函數里發送的。但是這里有問題!就是第二次ajax返回的數據不能賦值給全局對象的屬性,不知道是不是掉到坑里了。所以想用$q解決。

既然我們寄希望于Promise能夠解決回調地獄的問題,拿肯定不會再是使用回調的方式,你的疑惑是對的,可你的問題是沒有充分理解Promise是這么工作的。我先舉個例子:

var call1 = function(cb) { setTimeout(function() {cb(’call1’); }, 10);};var call2 = function(param1, cb) { setTimeout(function() {cb(param1 + ’ + call2’); }, 10);};call1(function(param1) { call2(param1, function(param2) {console.log(param2); //call1 + call2 });});

這是一個典型的回調依賴,call2依賴了call1的結果。如果用Promise改寫,應該是什么樣子呢?

var call1 = function() { return new Promise(function(resolve, reject) {setTimeout(function() { resolve(’call1’);}, 10); });};var call2 = function(param1) { return new Promise(function(resolve, reject) {setTimeout(function() { resolve(param1 + ’ + call2’);}, 10); });};call1() .then(function(param1) {return call2(param1); }) .then(function(param2) {console.log(param2); //call1 + call2 });

這里有幾個要注意的地方,1. 無需不必要的deferred對象,call1和call2本身返回Promise對象即可; 2. resolve幾乎扮演了之前cb的角色; 3. 當執行call1、call2時,不塞入回調,而是通過then拿到返回結果 4. 尤其return call2(param1);這個地方,真的不要再度嵌套(很多初入Promise的選手犯的錯),直接返回,下一個then里就能拿到結果

問題二:那這個例子來說吧

這就是最早說的問題,你過度反應了,明顯把簡單問題復雜化了,這么寫足矣:

ngApp.factory(’UserInfo’, [’$http’, ’$q’, function($http, $q) { return {query: function() { return $http({method: ’GET’, url: ’scripts/mine.json’});} };}]);

調用的地方,直接用then就好了:

UserInfo .query() .then(function(data){console.log(data);//這不就是結果嘍! });

第三、四個問題都是源于對Promise本身的實現沒概念,我之前寫過一個小教程,教大家自己手寫一個Promise的簡單實現,建議你跟著做做,先對Promise本身有個大概了解,一步步來手寫一個Promise

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品一级中文字幕精品视频免费观看| 天海翼精品一区二区三区| 日韩大片免费观看| 91精品蜜臀一区二区三区在线| 亚洲一区久久| 国产精品tv| 久久国产欧美| 午夜性色一区二区三区免费视频| 国产精品黄色| 国产高清一区二区| 日韩1区2区日韩1区2区| 中文字幕在线高清| 视频一区视频二区中文| 久久久久97| 91看片一区| 日本不卡高清| 精品捆绑调教一区二区三区| 免费精品视频最新在线| 精品一区二区三区中文字幕在线| 精品日韩毛片| 久久99久久久精品欧美| 亚洲欧美日韩高清在线| 国产欧美一区二区三区精品观看| 日韩久久视频| 日韩黄色免费网站| 激情综合亚洲| 国产精品videosex极品| 中日韩男男gay无套| 久久在线91| 模特精品在线| 日本久久精品| 日韩1区2区3区| 久久精品国产大片免费观看| 日本91福利区| 亚洲特色特黄| 精品黄色一级片| 亚洲精品伦理| 国模 一区 二区 三区| 国产精品丝袜xxxxxxx| 日韩三区免费| 日韩毛片网站| 91精品亚洲| 国产日韩欧美三区| av亚洲在线观看| 欧美日韩午夜| 免费国产自线拍一欧美视频| 中文av在线全新| 国产精品综合色区在线观看| 国产婷婷精品| 色婷婷久久久| 精品久久久久久久| 日韩精品国产欧美| 欧美天堂亚洲电影院在线观看| 精品一区二区三区四区五区| 日韩精品导航| 蜜臀va亚洲va欧美va天堂 | 欧美日韩中文| 99综合视频| 日韩欧美二区| 国产一区二区三区久久| 91麻豆精品激情在线观看最新| 一区在线免费| 久久三级视频| 国产欧美一区二区三区精品酒店| 国产探花一区在线观看| 亚洲一区av| 中文日韩欧美| 欧美va亚洲va日韩∨a综合色| 中文字幕在线免费观看视频| 日韩极品在线观看| 精品美女视频| 欧美日韩99| 一区二区精彩视频| 在线人成日本视频| 欧美成a人片免费观看久久五月天| 亚洲三级视频| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品91一区二区三区| 精品一区二区三区亚洲| 国产精品黄网站| 国产欧美激情| 国产精品自拍区| 国产九九精品| 欧美黑人巨大videos精品| 亚洲二区免费| 国产精品二区影院| 视频在线观看91| 久久视频精品| 国产黄大片在线观看| 国产精品白丝久久av网站| 免费不卡在线观看| 欧美日韩高清| 一区在线视频观看| 欧美视频二区| 亚洲毛片一区| 国产一区导航| 久久激情中文| 国产理论在线| 久久国产生活片100| 在线免费观看亚洲| 婷婷精品进入| 亚洲大片在线| 久久国产直播| 久久国产电影| 久久uomeier| 国产精品久久久久久久久久10秀| 国产精品久久久久久妇女| 清纯唯美亚洲综合一区| 亚洲资源在线| 免费在线观看成人| 中文不卡在线| 亚洲一区av| 爽好久久久欧美精品| 亚洲欧美日韩高清在线| 国产伊人精品| 一区二区亚洲精品| 99成人在线| 视频一区二区中文字幕| 热久久久久久久| 中文字幕亚洲在线观看| 日韩精品一二区| 亚洲日产国产精品| 97久久亚洲| 国产精品久久久久9999高清| 国产精品视频一区视频二区| 欧美a一区二区| 国内精品亚洲| 日韩一区电影| 久久久久久久久久久9不雅视频| 日韩精品2区| 亚洲手机在线| 老司机久久99久久精品播放免费| 亚洲人成网77777色在线播放| 日韩va亚洲va欧美va久久| 日本午夜精品视频在线观看| 国产精品久久777777毛茸茸| 精品国产成人| 91精品啪在线观看国产18| 欧美在线网站| 美女精品一区| 欧美一区免费| 国产一区二区三区四区五区 | 在线观看亚洲精品福利片| 免费人成黄页网站在线一区二区| 亚洲精品影视| 麻豆一区二区99久久久久| 欧美成人a交片免费看| 在线日韩视频| 中文字幕中文字幕精品| 国产麻豆一区二区三区精品视频| 国产精品第十页| 亚洲国内欧美| 午夜性色一区二区三区免费视频| 久久av偷拍| 久久高清精品| 中文字幕成人| 精品一区二区三区的国产在线观看| av免费不卡国产观看| 国产精品99一区二区| 综合亚洲自拍| 久久伊人国产| 女人av一区| 青青草伊人久久| 激情综合五月| 欧美日韩精品免费观看视频完整| 日本在线一区二区三区| 欧美日韩免费观看视频| 伊人久久大香线蕉av不卡| 国产欧美三级| 亚洲一区日韩在线| www.九色在线| 欧美亚洲免费| 99久久精品网| 国产精品xxxav免费视频| 中文在线一区| 天堂av在线| 欧美国产专区| 日韩欧美精品一区二区综合视频| 欧美性感美女一区二区| 国产精品一二| 美女国产一区| 久久中文亚洲字幕| 精品久久91| 国产欧美一区二区三区精品观看 | 91久久黄色| 日本午夜大片a在线观看| 国产调教精品| 蜜桃视频第一区免费观看| 久久视频一区| 精品一区二区三区免费看| 日本不卡的三区四区五区| 午夜久久一区| 电影亚洲精品噜噜在线观看 | 精品亚洲自拍| 97se亚洲| 首页国产欧美日韩丝袜| 久久精品影视| 神马久久午夜| 精品一区二区三区中文字幕在线| 91国内精品|