gpt4 book ai didi

javascript - 在 Promise.all 中使用同步函数有什么优势吗?

转载 作者:行者123 更新时间:2023-12-01 01:45:03 25 4
gpt4 key购买 nike

假设我有一个像这样的同步函数:

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是一个不合理的巨大数组,迭代它需要大量的 CPU 时间 - 在这种情况下,最好调用 sumTotalPromise.all这样一旦 promise 解决,它就可以立即解决,而不是在其他 promise 解决之后等待昂贵的操作。

但是,请记住 Promise.all也接受非 Promise:无需转换 sumTotal返回 Promise 的东西.

此外,如果 items是一个包含 price 的对象数组属性(property),请务必提供reduce具有初始值,否则您最终可能会得到类似 [Object object]102030 的结果为您total :

const somethingAsync = () => new Promise(res => setTimeout(res, 500, 'foo'));

function sumTotal(items) {
return items.reduce((total, item) => item.price + total, 0)
}
function checkOut(items) {
return Promise.all([
somethingAsync(),
somethingAsync('johndoe@gmail.com'),
sumTotal(items)
]).then(([offers, details, total]) => (
{ offers, details, total }
));
}

console.log('start');
checkOut([{ price: 10 }, { price: 20 }])
.then(output => console.log(output));

关于javascript - 在 Promise.all 中使用同步函数有什么优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52030406/

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