【发布时间】:2019-02-01 11:11:18
【问题描述】:
假设我有一个这样的同步函数:
function sumTotal(items) {
return items.reduce((total, item) => item.price + total)
}
它在 Promise.all 之后使用,其中包含此“结帐”函数中的一些异步 API 调用
function checkout(items) {
return Promise.all([
getLatestOffers(),
getCustomerDetails('johndoe@gmail.com')
]).then(([offers, details]) => {
return { offers, details, total: sumTotal(items) }
});
}
改变 sumTotal 函数以返回一个 Promise 并像这样在 Promise.all 中调用它有什么好处吗?
function checkOut(items) {
return Promise.all([
getLatestOffers(),
getCustomerDetails('johndoe@gmail.com'),
sumTotal(items)
]).then(([offers, details, total]) => {
return { offers, details, total }
});
}
【问题讨论】:
-
最大的区别是时间。在第一个版本中,
sumTotal(items)在与getLatestOffers()和getCustomerDetails('johndoe@gmail.com')调用相同的事件轮次中计算。在第二个版本中,sumTotal(items)在getLatestOffers()和getCustomerDetails('johndoe@gmail.com')传递它们的异步派生结果时在事件轮次中计算。 可能这两个值之间存在差异,并且没有唯一的答案来说明哪个值可能更合适。
标签: javascript node.js asynchronous promise synchronous