gpt4 book ai didi

javascript - Angular Promises 顺序循环

转载 作者:行者123 更新时间:2023-11-29 14:48:17 25 4
gpt4 key购买 nike

我有以下一组数据。

 $scope.orders = [
{ material: 'A', quantity: 32, orderNumber: 'dummy'},
{ material: 'A', quantity: 65, orderNumber: 'dummy'},
{ material: 'A', quantity: 86, orderNumber: 'dummy'},

{ material: 'B', quantity: 45, orderNumber: 'dummy'},
{ material: 'B', quantity: 68, orderNumber: 'dummy'},
{ material: 'B', quantity: 15, orderNumber: 'dummy'},

{ material: 'C', quantity: 11, orderNumber: 'dummy'}
];

我想处理 (createOrder) 按 Material 分组的订单。在处理完该特定 Material 的所有订单后,我想调用另一个执行 Material 运行的函数 (materialRun)。在此函数成功后,必须处理下一个 Material (及其相应的订单)等。所有这些调用必须是顺序的,因为后端无法并行处理所有内容。

所以我正在寻找这样的东西:

Material A:订单1 -> 订单2 -> 订单3 -> materialRun

当 A 的 materialRun 完成后,开始 material B

Material B:订单 1 -> 订单 2 -> 订单 3 -> materialRun

当 B 的 materialRun 完成后,开始 material C

...

我还需要每个 createOrder 的结果来更新订单列表

我现在正在使用 Angular promise ,但我愿意接受建议。我希望这个 fiddle 能有所帮助:http://jsfiddle.net/a1sp0ye2/

最佳答案

以下是具有异步主体的循环的模板,即下一次迭代必须仅在异步任务完成时发生。它适用于 Angular 上下文中的 promise ,但可以推广到我认为的任何 promise 实现:

/**
* Loop the items array asynchronously.
*
* @param items - Array to iterate
* @param doLoopBody - Callback that executes the body loop, returns promise
*/
function asyncLoop(items, doLoopBody) {
var i = 0, d = $q.defer();

nextIteration();

return d.promise;

function nextIteration() {
if( i < items.length ) {
doLoopBody(items[i], i, items).then(
function() {
i++;
nextIteration();
},
onError
);
}
else {
d.resolve();
}
}

function onError(reason) {
d.reject(reason);
}
}

基于此,here是您案例的粗略实现(查看浏览器控制台的输出)。

关于javascript - Angular Promises 顺序循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797187/

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