在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ 用 axios 對同一個(gè) URL 同時(shí)發(fā)起多個(gè)請求(不同參數(shù)),返回的 data

用 axios 對同一個(gè) URL 同時(shí)發(fā)起多個(gè)請求(不同參數(shù)),返回的 data 錯(cuò)亂

前端 Vue,后端 Java。后端生成 API 供前端調(diào)用。
所有 API 的 URL 地址是同一個(gè),只是對不同的 API 傳遞不同的參數(shù)。

參數(shù)格式如下:

let data = {
  'username': 'admin',
  'password': 'admin',
  'methodName': 'method1',
  'boId': 'bo1',
  'returnType': 'json',
  'parameters': 'param1'
};

username、password、returnType 是固定的,methodName、boId、parameters 會隨著不同的 API 而變化。

前端用 axios 調(diào)用。當(dāng)同時(shí)調(diào)用三個(gè)API時(shí)(URL 相同,params 不同),返回的數(shù)據(jù)會錯(cuò)亂。

axios.get(apiUrl, {params: data1}).then((response) => {
  myData1 = response.data
})

axios.get(apiUrl, {params: data2}).then((response) => {
  myData2 = response.data
})

axios.get(apiUrl, {params: data3}).then((response) => {
  myData3 = response.data
})

期望結(jié)果:

myData1: {'data': 'A'}
myData2: {'data': 'B'}
myData3: {'data': 'C'}

但實(shí)際結(jié)果是,有時(shí)候可以得到期望結(jié)果,有時(shí)候返回的數(shù)據(jù)卻會錯(cuò)亂,比如 myData1myData2 相互調(diào)包,chrome 查看 response 也是錯(cuò)亂的

// response 1、2 也相互調(diào)包
myData1: {'data': 'B'}
myData2: {'data': 'A'}
myData3: {'data': 'C'}

或者是 myData1myData2 返回相同值:

// response 1、2 返回相同值
myData1: {'data': 'A'}
myData2: {'data': 'A'}
myData3: {'data': 'C'}

總結(jié)一下,我的期望結(jié)果是這樣的:

參數(shù)(params: data) 實(shí)際請求URL (Request URL) 響應(yīng)(Response) 返回值 (myData)
data1 Request URL1 Response1 myData1
data2 Request URL2 Response2 myData2
data3 Request URL3 Response3 myData3

但實(shí)際調(diào)用會經(jīng)常發(fā)生以下兩種錯(cuò)誤情況:

一、其中兩個(gè)API響應(yīng)和返回值調(diào)包

參數(shù)(params: data) 實(shí)際請求URL (Request URL) 響應(yīng)(Response) 返回值 (myData)
data1 Request URL1 Response2 myData2
data2 Request URL2 Response1 myData1
data3 Request URL3 Response3 myData3

二、其中兩個(gè)API響應(yīng)和返回值相同

參數(shù)(params: data) 實(shí)際請求URL (Request URL) 響應(yīng)(Response) 返回值 (myData)
data1 Request URL1 Response1 myData1
data2 Request URL2 Response1 myData1
data3 Request URL3 Response3 myData3

但當(dāng)以上3個(gè)API分別調(diào)用時(shí),每次都可以返回正確結(jié)果。

試過 axios.all \ promise.all ,不行。


請問導(dǎo)致這種問題的原因是什么?前端還是后端的問題?
是不是同一個(gè) URL 的原因?但后端是用一個(gè)現(xiàn)成的框架,只能用這種API形式。
有沒有辦法解決這個(gè)問題?謝謝。

回答
編輯回答
入她眼

ajax是異步的,同時(shí)發(fā)三個(gè)請求等于同時(shí)開了3個(gè)線程,并不知道哪個(gè)ajax call先回來,所以這是正?,F(xiàn)象, 你可以用param中的key和ajax call 回來的數(shù)據(jù)作對比,判斷是哪個(gè)ajax call

2017年5月30日 09:19
編輯回答
壞脾滊

個(gè)人認(rèn)為不會出現(xiàn)這種錯(cuò)亂的問題
你可以看看控制臺 - 網(wǎng)絡(luò) 中這三個(gè)請求對應(yīng)的響應(yīng)

2017年7月17日 15:58
編輯回答
哚蕾咪

去控制臺看看, 你的 data1 和 myData1 和 response1 是否能一一對應(yīng). 如果對應(yīng)不上那就是后端問題

如果對應(yīng)上了, 可能你以為給了后端的data1, 其實(shí)變成了data2, 就是你的傳參問題了.

2018年7月2日 16:47
編輯回答
柚稚

如果你的表述沒有問題的話,我覺得是后端的問題。

2017年1月19日 03:32
編輯回答
枕頭人

如果你表述沒有問題的話,我也覺得是后端的問題。
你用的是全局(或上級作用域里)的變量去存儲后端返回值,而且變量是固定的,無論哪一個(gè)最后回來,你的變量存儲的值是不會變的。

2017年4月5日 20:43
編輯回答
避風(fēng)港

我擦,我也遇到了,找了很久是后端的鍋,并發(fā)請求,一定概率,不同接口,返回?cái)?shù)據(jù)一樣

2018年5月31日 03:46
編輯回答
陌璃

遇到相同問題,請問你們后臺是怎么解決的。

2018年5月20日 02:40
編輯回答
妖妖
axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // Both requests are now complete
  }));
2018年6月8日 12:04