gpt4 book ai didi

javascript - 是否可以创建一个 promise 循环,直到以 Angular 拒绝

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:35 26 4
gpt4 key购买 nike

我希望加载约 10000 个资源,并且由于某些计算的完成,在解析阶段一次完成所有这些花费的时间有点太长。因此,我想到了按顺序逐页加载资源的想法,但是由于所有这些资源都需要可见(在 map 上)标准,基于用户输入的分页实际上不起作用。

我知道 promise 可以这样链接:

promise.then(doThis).then(doThat).then(doWhat);

而且我知道可以使用 $q.all 解决一系列 promise,例如:

$q.all([doThis, doThat, doWhat]);

然而,我想要的是连续不断地调用相同的 promise ,直到遇到拒绝为止。

例子:

function next() {
var deferred = $q.defer();
if(someCondition) {
deferred.reject();
} else {
//do something
//store data somewhere
deferred.resolve();
}

return deferred.promise;
}

假设此函数执行一些 $http 调用并将结果存储在服务/ Controller 中的某处。如果它满足特定条件(可能不再有任何页面或出现 http 错误),它会拒绝 promise ,否则会解决它。

现在我想做这样的伪代码

$q.loop(next).untilError(handleError);

其中 next 将在解决前一个 next 调用时循环调用,直到被拒绝。

这样的事情可能吗?

最佳答案

检查此演示的控制台:JSFiddle .

它确保 API 的调用按顺序使用 userId 从 1 到 5。并在某个条件下停止 (userId > 5)。

angular.module('Joy', [])
.controller('JoyCtrl', ['$scope', '$http', function ($scope, $http) {

getUser(1, getUser);

function getUser(userId, next) {
if (userId > 5) {
console.log('Enough. Stop');
return;
}
$http.get('http://jsonplaceholder.typicode.com/posts?userId=' + userId).then(function (data) {
console.log(data.data);
next(userId + 1, next);
});
}
}]);

关于javascript - 是否可以创建一个 promise 循环,直到以 Angular 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32180329/

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