gpt4 book ai didi

angularjs - 当 $q.all 在 Angularjs 中有多个 http 调用函数时,是否有任何方法排序?

转载 作者:行者123 更新时间:2023-12-04 16:50:54 24 4
gpt4 key购买 nike

首先,我不擅长 angularjs。

当我一直在研究 $q 时,我遇到了一个奇怪的问题。

当我使用 $q.all 时,我将 $http 放在常规序列中,期望以相同的顺序获得结果,

但我得到的是随机结果。

看到这个并纠正我的愚蠢。

    $q.all([
HttpService.editItem(
$scope.$parent.category_id, // category id
Define.CAR_CAT, // category url to request
$scope.car_id, // car_id wanna edit
{car_name: inputValue.toUpperCase()} // data
),
HttpService.getCarList(
$scope.$parent.category_id, // category id
Define.CAR_CAT // category url to request
)
]).then(function (results) {
if (results[0].statusText === 'OK' && results[1].statusText === 'OK') {
.....
});

'HttpService' 是我的应用程序的一项服务。它返回 promise 。

我期望的是

先编辑车名,后获取车名。

但是我得到的结果是先得到汽车列表,然后再编辑汽车名称。

我正在使用

返回 $q(function(resolve, reject){ });

而不是使用

$q.defer();

.

.

.

.

这些是我的 HttpService 部分
function editItem(cat_id, cat_url, content_id, item_data) {
return $q(function (resolve, reject) {
$http({
method: 'PUT',
url: Define.TEST_URL + cat_id + cat_url + content_id,
data: item_data
}).then(function (response) {
resolve(response);
}, function (error) {
reject(error);
});
});
}



function getCarList(cat_id, cat_url) {
return $q(function (resolve, reject) {
$http({
method: 'GET',
url: Define.TEST_URL + cat_id + cat_url
}).then(function (response) {
resolve(response);
}, function (error) {
reject(error);
});
});
}

这是 getCarList 响应
{
"error_msg": "",
"error_num": 0,
"statusText": "OK"
"results": [
{
"car_id": "CAR0121",
"car_name": "AUDI R8"
},
{
"car_id": "CAR0122",
"car_name": "AUDI A6"
},
{
"car_id": "CAR0128",
"car_name": "BENZ"
},
{
"car_id": "CAR0130",
"car_name": "PORCHE"
},
]
}

最佳答案

Is there an method order in $q.all in Angularjs?



是的,订单是关于您给的 promise 订单 $q.all()
来自引用: $q.all()

Returns a single promise that will be resolved with an array/hash of values, each value corresponding to the promise at the same index/key in the promises array/hash. If any of the promises is resolved with a rejection, this resulting promise will be rejected with the same rejection value.



示例 1(列表)
var  promises = [promise1(), promise2(), promise3()];

$q.all(promises).then((values) => {
console.log(values[0]); // value promise1
console.log(values[1]); // value promise2
console.log(values[2]); // value promise3
});

示例 2( map )
var  promises = {one: promise1(), two: promise2(), three: promise3()};

$q.all(promises).then((values) => {
console.log(values.one); // value promise1
console.log(values.two); // value promise2
console.log(values.three); // value promise3
});

But results I got was get car list first, edit car name later.



建议您创建 map 接近并测试你得到的:
$q.all({edit:
HttpService.editItem(
$scope.$parent.category_id, // category id
Define.CAR_CAT, // category url to request
$scope.car_id, // car_id wanna edit
{car_name: inputValue.toUpperCase()} // data
),
getCar: HttpService.getCarList(
$scope.$parent.category_id, // category id
Define.CAR_CAT // category url to request
)
}).then(function (results) {
// results.edit
// results.getCar
});

编辑

demo Plunker using Map

demo Plunker using List

关于angularjs - 当 $q.all 在 Angularjs 中有多个 http 调用函数时,是否有任何方法排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com