gpt4 book ai didi

javascript - 如何从 JSON 对象内的 Promise 返回数据? Angular js

转载 作者:行者123 更新时间:2023-12-03 03:49:01 25 4
gpt4 key购买 nike

这是我第一次尝试从 JSON 对象内的 Promise 返回数据,并且坚持执行此任务

常见的方式是这样的

服务js

 app.factory("dataService", ["$http",
function ($http) {
function getData(id) {
return $http.get('endpoint', id)
.then(function (response) {
return response.data
});
}

return {
getData: getData
}

}])

Controller js

$scope.data = {}

dataService.getData($routeParams.id)
.then (function (res) {
$scope.data = res
});

效果很好,每个人都很高兴

现在我正在尝试在对象内分配数据

Controller js

 angular.forEach($scope.properties, function (item) {
$scope.data.properties.push({
order: item.number,
name: item.name,
value: item.value,
items: $scope.getProp(item.id)
})
});

$scope.getProp = function (id) {
return dataService.single(id)
.then (function (res) {return res});
};

服务js

function single(id) {
return $http.get('endpoint' + "/" + id)
.then(function (response) {
return response.data
})
}

现在我得到了带有 Promise 和 $$state 的 JSON 对象

我了解这个问题的本质,但这个问题的解决方案超出了我的知识范围,所以有人可以帮助我解决它吗?

最佳答案

使其发挥作用的一种方法是:

$scope.data.properties = [];
var promiseList = $scope.properties.map(function(item) {

var promise = $scope.getProp(item.id);

return promise.then(function (data) {
var newItem = {
id: item.id,
order: item.number,
name: item.name,
value: item.value,
items: data
};
$scope.data.properties.push(newItem);
return newItem;
});
});

$q.all(promiseList).then(function(itemList) {
console.log(itemList);
//More code here
});

上面的示例创建了一个 Promise 列表,该列表返回具有 items 属性的对象,该属性填充了从 $scope.getProps 返回的 Promise 中的数据。

此外,它将每个填充的项目推送到范围。由于异步 XHR 可能不会按照启动顺序完成,因此范围列表的顺序可能与原始顺序不同。

$q.all method但是将等待所有 XHR 完成并按原始顺序返回列表。

关于javascript - 如何从 JSON 对象内的 Promise 返回数据? Angular js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247164/

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