gpt4 book ai didi

angularjs - 如何使用 angularjs $q 顺序链接 Promise?

转载 作者:行者123 更新时间:2023-12-02 19:09:43 28 4
gpt4 key购买 nike

在 Promise 库Q中,您可以执行以下操作来按顺序链接 Promise:

var items = ['one', 'two', 'three'];
var chain = Q();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;

但是,以下内容不适用于$q:

var items = ['one', 'two', 'three'];
var chain = $q();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;

最佳答案

Redgeoff,你自己的答案是我曾经将数组转换为一系列链接的 promise 的方式。

出现的事实上模式如下:

function doAsyncSeries(arr) {
return arr.reduce(function (promise, item) {
return promise.then(function(result) {
return doSomethingAsync(result, item);
});
}, $q.when(initialValue));
}

//then
var items = ['x', 'y', 'z'];
doAsyncSeries(items).then(...);

注释:

  • .reduce 是原始 JavaScript,不是库的一部分。
  • result 是之前的异步结果/数据,包含在内是为了完整性。初始结果initialValue。如果不需要传递“结果”,则只需将其省略即可。
  • 根据您使用的 Promise 库来调整 $q.when(initialValue)
  • 在您的情况下,doSomethingAsyncfoo(或者foo()返回什么?) - 无论如何,都是一个函数。

如果你像我一样,那么这个图案乍一看就像是一个无法穿透的木棍,但一旦你的眼睛变得协调起来,你就会开始把它视为一个老 friend 。

编辑

这是一个demo ,旨在证明上面推荐的模式实际上确实按顺序执行其 doSomethingAsync() 调用,而不是按照下面评论中的建议在构建链时立即执行。

关于angularjs - 如何使用 angularjs $q 顺序链接 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25704745/

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