成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:279日期: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

相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品久久久久永久免费观看| 婷婷丁香激情综合| 成人精品小蝌蚪| 亚洲国产日韩精品| 久久精品一二三| 欧美色精品天天在线观看视频| 亚洲高清毛片| 91亚洲精品乱码久久久久久蜜桃| 激情综合网最新| 亚洲午夜激情网站| 国产日产欧美一区二区三区 | 中文字幕在线观看一区| 在线影视一区二区三区| 国产亚洲一区在线播放| 午夜精品婷婷| 国产a级毛片一区| 精品一区在线看| 亚洲高清免费在线| 亚洲欧美日韩综合aⅴ视频| 久久伊人蜜桃av一区二区| 欧美一区二区精品在线| 欧美系列日韩一区| 色婷婷综合久久久久中文一区二区 | 久久精品国产成人一区二区三区 | 狠狠色伊人亚洲综合网站色| 国产不卡视频在线观看| 精品在线播放免费| 久久99精品久久久久久久久久久久| 亚洲成精国产精品女| 一区二区在线观看免费视频播放| 中文字幕在线一区| 国产精品全国免费观看高清| 国产夜色精品一区二区av| 精品国产区一区| 日韩欧美激情四射| 日韩欧美亚洲另类制服综合在线| 欧美日韩一区二区三区不卡| 欧美日韩精品专区| 欧美日韩高清一区二区| 欧美日韩亚州综合| 欧美三日本三级三级在线播放| 色婷婷综合久久久中文一区二区| 日本久久电影网| 欧美老女人第四色| 日韩午夜激情免费电影| 精品国产污网站| 久久久久久久久久久黄色| 久久久精品国产99久久精品芒果 | 91论坛在线播放| 99久久精品一区| 色综合久久综合中文综合网| 色综合久久综合网97色综合| 欧美极品一区| 国内精品**久久毛片app| 激情欧美一区| 亚洲精选国产| 久久激情网站| 欧美午夜精品久久久久久超碰| 欧美猛男gaygay网站| 7777女厕盗摄久久久| 26uuu国产日韩综合| 国产女主播在线一区二区| 亚洲欧洲日韩在线| 亚洲黄色小说网站| 亚洲成av人**亚洲成av**| 日韩黄色片在线观看| 精品亚洲aⅴ乱码一区二区三区| 成人综合婷婷国产精品久久蜜臀| 色综合久久中文字幕| 精品成人在线| 色偷偷成人一区二区三区91| 欧美日韩在线播放| 欧美成人国产一区二区| 国产精品久久久久影院色老大| 亚洲一区二区三区四区五区黄| 美美哒免费高清在线观看视频一区二区| 国内精品免费在线观看| 91麻豆福利精品推荐| 国产精品免费看| 欧美亚洲国产bt| 2022国产精品视频| 亚洲欧美日韩久久精品| 久久精品国产77777蜜臀| 成人免费看视频| 亚洲精品乱码| 欧美私人免费视频| 亚洲精品一区二区三区福利| 亚洲欧美日韩综合aⅴ视频| 日本伊人午夜精品| 成人毛片在线观看| 99视频+国产日韩欧美| 欧美中文字幕不卡| 久久久亚洲欧洲日产国码αv| 亚洲激情自拍偷拍| 久久99精品视频| 99精品国产视频| 国产九区一区在线| 日韩免费高清av| 亚洲欧美偷拍另类a∨色屁股| 国内精品久久久久影院薰衣草| 欧美国产一区二区三区激情无套| 日本高清不卡视频| 久久久亚洲高清| 日韩av高清在线观看| 99精品一区二区| 一本大道久久精品懂色aⅴ| 亚洲精品一区在线观看| 亚洲福利视频一区| 欧美成人在线免费观看| 久久狠狠一本精品综合网| 久久精品人人做| 美女尤物国产一区| 亚洲一级一区| 日韩一级成人av| 午夜精品久久久久久久久| 91视频一区二区三区| 精品视频999| 亚洲主播在线播放| 91浏览器打开| 91.成人天堂一区| 亚洲国产精品久久久久婷婷884 | 日韩精品自拍偷拍| 亚洲成av人片一区二区梦乃| 91亚洲精华国产精华精华液| 在线观看免费一区| 一区二区三区四区激情| www.久久精品| 欧美区在线观看| 亚洲成人精品一区二区| 欧美日韩影院| 26uuu精品一区二区在线观看| 天堂精品中文字幕在线| 欧美日韩喷水| 日韩精品一区二区三区四区视频 | 欧美精品tushy高清| 亚洲一区二区三区四区中文字幕| 91亚洲精品一区二区乱码| 精品污污网站免费看| 一区二区三区中文字幕| av在线不卡网| 欧美日韩的一区二区| 亚洲成人av电影| 亚洲国产精品一区| 久久久久久影视| 国产成人在线视频网址| 欧美综合视频在线观看| 亚洲最快最全在线视频| 欧美高清视频一区| 欧美精品一区二区三区蜜臀 | 精品久久久影院| 国产乱码精品一区二区三区忘忧草| 蜜桃伊人久久| 亚洲国产精品麻豆| 国产婷婷精品| 亚洲精品国产成人久久av盗摄 | 亚洲精品国产系列| 国产精品毛片大码女人| 午夜精品一区二区在线观看| 欧美成人精精品一区二区频| 国产乱一区二区| 欧美精品视频www在线观看| 日本网站在线观看一区二区三区 | 毛片一区二区三区| 新67194成人永久网站| 亚洲欧美另类图片小说| 在线免费高清一区二区三区| 国产精品污www在线观看| 99久久国产综合精品色伊| 日韩一级免费一区| 国产成人一区在线| 欧美一区二区三区人| 国产呦萝稀缺另类资源| 欧美日本高清视频在线观看| 麻豆视频一区二区| 欧美影院一区二区| 韩国女主播成人在线| 91精品国产欧美一区二区成人| 国产精品一区在线| www激情久久| 欧美精品大片| 亚洲免费av高清| 麻豆av一区二区三区久久| 亚洲成a人片在线观看中文| 久久xxxx| 日本亚洲电影天堂| 91 com成人网| 成人黄色在线看| 国产精品网站在线观看| 亚洲国产精品一区| 亚洲高清视频中文字幕| 在线亚洲高清视频| 国产一区二区三区蝌蚪| www激情久久| 99www免费人成精品| 午夜精品久久久久久久久| 欧美日韩国产电影| 91捆绑美女网站| 一色屋精品亚洲香蕉网站| 久久国产福利| 国产精品一卡二卡|