gpt4 book ai didi

javascript - 在 angularjs 中构建 promise

转载 作者:行者123 更新时间:2023-11-30 10:13:54 26 4
gpt4 key购买 nike

我已就此进行了大量阅读,但最终我发现的教程和指南差异太大,以至于我无法很好地理解这个概念。

这是我想要实现的:

1) Simple http request from our server [Any API for demonstration]

2) Run a function with data from (1). [Remove a property from the object]

3) Use result and length of (2) to run a loop of $http requests to our server. [Or any server]

4) This will result in 6 different objects. Run a function on these 6 objects. [Add a property]

5) Once ALL of this is done, run a separate function [Log "finished"]

如何使用 promise 实现这一点?我如何通过对 (2) 的 promise 从 (1) 传递数据?这是实现我需要做的事情的正确方法吗?

如果有人能告诉我应该如何构建它,那将非常有帮助;对于这个问题,我已使函数尽可能简单。

最佳答案

是的,promises 非常适合为这类问题构建解决方案。

简化的解决方案(或多或少的伪代码):

$http(...)
.then(function(response) {
// do something with response, for example:
var list = reponse.data.list;
// return it so that you can use it in the next 'then'.
return list;
})
.then(function(list) {
var promises = [];
angular.forEach(list, function(item) {
// perform a request for each item
var promise = $http(...).then(function(itemResponse) {
itemResponse.extraProperty = true;
return itemResponse;
});
// we make an array of promises
promises.push(promise);
});
// combine all promises into one and return it for the next then()
return $q.all(promises);
})
.then(function(itemsList) {
// itemsList is now an array of all parsed item responses.
console.log(itemsList);
});

(希望这是正确的,我没有测试过。)

如您所见,您可以在回调中返回值以将其传递给下一个 then(),或者您可以传递一个 promise ,这将导致在下一个回调解析时调用它。 $q.all() 用于将多个 promise 合并为一个,如果全部解决则 resolve。

编辑:我意识到您可以选择省略这三行:

        return list;
})
.then(function(list) {

但这是一个很好的语法,因为任务的分离更加明显。

关于javascript - 在 angularjs 中构建 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25017900/

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