【发布时间】:2021-09-04 08:07:02
【问题描述】:
我在使用 _.reduce 和 promises 时遇到问题。
我需要使用 Promise 来获取我的项目,并且我想使用 _.reduce 使用其他 Promise 修改结果的内容。
我的代码:
StripeJs.getBalanceTransactions = function(locals, gte, lte) {
return stripe.balanceTransactions.list().then(function(balanceTransactions) {
let payoutsBalanceTransactions = _.filter(balanceTransactions.data, { type: 'payout' });
payoutsBalanceTransactions = _.reduce(payoutsBalanceTransactions, function(arr, payoutBalanceTransaction) {
stripe.balanceTransactions.retrieve(payoutBalanceTransaction.id).then(function(subItems) {
payoutBalanceTransaction.subitems = subItems;
console.log(payoutBalanceTransaction); // works !
arr.push(balanceTransactions);
});
return arr;
}, []);
console.log(payoutsBalanceTransactions); // does not work, array empty
return Promise.resolve(payoutsBalanceTransactions);
});
};
【问题讨论】:
-
问题在于异步 - 在任何
.then(function(subItems) {代码运行之前,reduce 将一直执行 - 将一些 console.logs 放在那里,看看我是对的 -
我没有看到你减少任何东西,如果你只想等待一系列承诺,请使用
Promise.all -
您是否使用reduce 以便每个
stripe.balanceTransactions.retrieve在前一个完成后运行?即它们可以“一次全部”运行,还是一次运行一个? -
顺便问一下,
arr.push(balanceTransactions);应该是arr.push(payoutBalanceTransaction)吗?多次推送balanceTransactions似乎很奇怪
标签: javascript promise lodash reduce