gpt4 book ai didi

javascript - Angular - 多重 promise 和迭代 - 如何获得结果

转载 作者:行者123 更新时间:2023-12-02 17:00:44 25 4
gpt4 key购买 nike

好吧,我是 JavaScript 编程新手,我在异步方面确实遇到了困难。我尝试在下面展示我的示例:

Controller

$scope.handleClick = function(stuff) {
var promise = fetchOtherStuffs(stuff.id1);
var promiseTwo = fetchOtherStuffs(stuff.id2);

$q.all([promise, promiseTwo]).then(function(data) {
// fails because data is undefined
console.log(data[0].length);
console.log(data[1].length);
});
};

var fetchOtherStuffs = function(stuffId) {
return $http.get('http://localhost/myapi/stuff/' + stuffId)
.then(function(theStuffs) {
var promises = [];

for (var i = 0; i < theStuffs.data.length; i++) {
var otherStuffId = theStuffs.data[i].otherStuffId;
promises.push(
$http.get('http://localhost:8085/myapi/otherstuff/'
+ otherStuffId));
}

$q.all(promises).then(function(data){
var result = [];

for (var i = 0; i < promises.length; i++) {
result.push(data[i].data[i]);
}

// this works and the data count is as expected
console.log('returning: ' + result.length);
return result;
});
});
};

所以我需要:

  • 调用myapi/stuff
  • 获取该调用的结果(可以是多个对象)并为每个对象调用 /myapi/otherstuff
  • 将所有这些对象从otherstuff返回到handleClick方法

我真的不知道如何实现fetchOtherStuffs方法,因此 promise 返回实际上在handleClick方法中需要时返回一个值。

非常感谢。

最佳答案

在获取 myapi/stuff 后,您忘记了 then 回调中的一点 return:

function fetchOtherStuffs(stuffId) {
return $http.get('http://localhost/myapi/stuff/' + stuffId)
.then(function(theStuffs) {

return $q.all(promises).then(function(data){
// ^^^^^^

return result;
});
});
}

此外,我不确定是否两次访问 [i] 属性

for (var i = 0; i < promises.length; i++) {
result.push(data[i].data[i]);
}

是正确的,但这当然取决于数据的格式。

关于javascript - Angular - 多重 promise 和迭代 - 如何获得结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748510/

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