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

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

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

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

問題描述

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

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

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

問題解答

回答1:

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

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

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

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

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

Promise

generator配合co

async/await

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

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

問題一:我需要用第一次發(fā)送ajax請求回的數(shù)據(jù)作為第二次ajax的參數(shù),而第二次的ajax是在第一次ajax的回調函數(shù)里發(fā)送的。但是這里有問題!就是第二次ajax返回的數(shù)據(jù)不能賦值給全局對象的屬性,不知道是不是掉到坑里了。所以想用$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. 當執(zhí)行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本身的實現(xiàn)沒概念,我之前寫過一個小教程,教大家自己手寫一個Promise的簡單實現(xiàn),建議你跟著做做,先對Promise本身有個大概了解,一步步來手寫一個Promise

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆91精品91久久久的内涵| 精品视频在线观看网站| 国产激情在线播放| 国产精品呻吟| 日韩天堂在线| 国产精品亚洲一区二区在线观看| 亚洲欧美日韩综合国产aⅴ| 亚洲精品大全| 日韩精品一二区| 欧美理论视频| 99视频精品全国免费| 在线国产日韩| 亚洲免费激情| 亚洲激情二区| 久久影视一区| 久久久久国产| 亚洲女同一区| 中文一区一区三区免费在线观 | 亚洲免费影视| 涩涩涩久久久成人精品| 欧美日韩在线二区| 国产精品久久久久av电视剧| 国产精品www994| 国产欧美日韩免费观看| 亚洲美女91| 国产亚洲电影| 国产精品xvideos88| 美腿丝袜亚洲三区| 日韩欧美四区| 欧美日一区二区三区在线观看国产免| 亚洲精品免费观看| 国产高清一区二区| 亚洲欧美高清| 综合在线一区| 国产精品porn| 精品日韩一区| 久久三级视频| 亚洲婷婷免费| 蜜桃久久精品一区二区| 国产午夜精品一区二区三区欧美| 男人的天堂亚洲一区| 99久久九九| 久久av一区| 日本午夜精品| 夜鲁夜鲁夜鲁视频在线播放| 日韩午夜电影| 老鸭窝一区二区久久精品| 激情五月色综合国产精品| 黄色成人91| 国产精品羞羞答答在线观看| 日韩亚洲精品在线| 久久久久免费| 欧美片第1页综合| 91精品国产乱码久久久久久久| 日av在线不卡| 欧美亚洲自偷自偷| 久久久久久黄| 91精品麻豆| 日韩欧美中文| 免播放器亚洲| 久久美女性网| 91精品电影| 激情久久久久久久| 国产成人免费av一区二区午夜| 三级一区在线视频先锋| 国产探花一区在线观看| 一本色道精品久久一区二区三区| 日韩av专区| 伊人成人网在线看| 狂野欧美性猛交xxxx| 中文视频一区| 免费观看在线综合| 成人午夜国产| 国产欧美日本| 91成人在线精品视频| 亚洲精品少妇| 亚洲精品影视| 亚洲欧美网站在线观看| 欧美成a人免费观看久久| 国产精品久久久久久久免费软件| 日韩福利视频网| 久久三级毛片| 精品视频在线观看网站| 国产一区二区三区四区五区| 欧美国产偷国产精品三区| 成人精品动漫一区二区三区| 欧美激情三区| 国产精品片aa在线观看 | 韩国女主播一区二区三区| 精品成人免费一区二区在线播放| 国产欧美高清| 久久成人一区| 欧美日韩va| 欧美日韩一区二区国产| 日本久久二区| 国产剧情在线观看一区| 国产一区丝袜| 五月天综合网站| 蜜臀av亚洲一区中文字幕| 最新亚洲国产| 91精品一区二区三区综合在线爱| 中文字幕亚洲影视| 中文字幕一区二区精品区| 男人的天堂久久精品| 日韩精品三区四区| 久久亚洲美女| 国精品产品一区| 亚洲激精日韩激精欧美精品| 欧美专区一区| 美女被久久久| 精品久久一区| 天堂av在线一区| 日本成人在线一区| 国产精品99在线观看| 日韩中文字幕区一区有砖一区| 精品国产乱码久久久| 久久精品福利| 婷婷国产精品| 欧美欧美黄在线二区| 麻豆国产精品| 天堂久久av| 亚洲天堂成人| 精品免费视频| 日韩二区在线观看| 欧美成人精品三级网站| 欧美国产极品| 日本一不卡视频| 亚洲网站视频| 精品一区二区三区中文字幕视频| 国内精品福利| 国产精品一区二区三区av麻| 91综合网人人| 国产精品v一区二区三区| 视频一区二区中文字幕| 精品一区二区三区免费看 | 99精品电影| 7777精品| 综合激情五月婷婷| 国产精品av久久久久久麻豆网| 欧美日本久久| 日韩国产激情| 日韩毛片视频| 国产精品成人自拍| 久久性天堂网| 亚洲一区二区三区四区五区午夜| 国产黄大片在线观看| 国产精品久久久久久久免费软件 | 爽爽淫人综合网网站| 精品视频在线观看网站| 欧美专区一区| 日韩av不卡在线观看| 亚洲精品日本| 久久69成人| 久久精品官网| 蜜桃久久av一区| 野花国产精品入口| 久久国产99| 国产精品观看| 国产91一区| 亚洲精品人人| 国产激情一区| 成人精品国产亚洲| av不卡在线看| 国产精品一区二区三区www| 91一区二区| 一区在线免费观看| 国产日韩亚洲欧美精品| 国产在线日韩精品| 久久黄色影院| 国产乱码精品一区二区三区亚洲人| 国产精品亚洲人成在99www| 天堂久久av| 久久精品女人| 婷婷丁香综合| 精品国产亚洲日本| 国产一区日韩欧美| 综合激情婷婷| 91一区二区三区四区| 久久最新视频| 亚洲成人av观看| 国产精品a久久久久| 欧美大黑bbbbbbbbb在线| 久久99影视| 黄色亚洲大片免费在线观看| 国产剧情在线观看一区| 欧美天堂视频| 日韩精品电影一区亚洲| 九色精品91| 精品国产一区二区三区噜噜噜| 亚洲最新av| 国产综合色区在线观看| 日韩欧美激情电影| 欧美va天堂在线| 九九九精品视频| 久久精品凹凸全集| 国产日韩欧美在线播放不卡| 亚洲精一区二区三区| 黄色成人在线网址| 国模 一区 二区 三区| 日韩中文在线电影|