gpt4 book ai didi

javascript - Angular q.all 即时响应与延迟响应

转载 作者:行者123 更新时间:2023-11-28 04:21:39 27 4
gpt4 key购买 nike

我有一个方法论问题。目前,我正在使用 $q.all 在单个返回中捕获多个 Promise,然后将所有结果作为单个请求进行处理。

即:$q.all([promise1(),promise2(),promise3(),promise(4),promise5()])..then(function(response){ ...}

但是,我注意到有时会在明显不同的时间范围内返回不同的 promise 。所有的 promise 都是对第三方网站的http调用。当任何特定的 Promise 延迟 8 秒……或 14 秒时,所有 Promise 的最终结果都会延迟相同的持续时间。最弱...相当“慢”...链接综合症。

我可以使用什么方法来同时调用所有 promise ,但仍然允许处理结果并让用户在结果进入时查看它们?在一次处理它们之前不等待所有它们返回?

最佳答案

正如评论中所建议的,您可以单独使用它们,但如果您确实想同时调用它们并在一个 promise 中处理它们,您可以使用 notify 回调 promise 。我创建了 $q 的扩展,它使用 notify() 函数将 promise 解析为一个:

app.run(function($q){
$q.each = function(promises){
var deferred = $q.defer();

promises.forEach(function(promise){
promise.then(function(data){
deferred.notify(data);
});
});
return deferred.promise;
};
});

这是一个相当幼稚的实现,例如不处理错误,但它让您了解所涉及的内容。

然后你就可以像这样使用它:

var promises = [promise1(),promise2(),promise3(),promise(4),promise5()];

$q.each(promises).then(null, null, function(data){
console.log(data); // This is called when each promise resolves.
});

Here's a Plunker showing this in action

关于javascript - Angular q.all 即时响应与延迟响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45376707/

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