array.map javascript中的调用wait



我试图在array.map函数中调用一个等待函数。

这是从前端调用的,用于从Stripe Products检索列表。stripe product对象不会直接返回成本,它只返回一个id,必须调用该id才能返回有关价格、金额的信息。。货币等

getOneToOneProductDetails = async (req, res, next) => {
let products = await stripe.products.list({
limit: 3,
})
products = await products.data.map((product) => {
if(product.active === true)
return {
productId: product.id,
productPrice: product.default_price,
productDescription: product.description,
productName: product.name,
productNumPrice: this.getPrice(product.default_price)
}
})
console.log(products)
res.send(products)
}
getPrice = async(req, res,next) => {
const result = await stripe.prices.retrieve(
req
);
return result.unit_amount
console.log(result)
}

我从products.data.map得到的结果是

{
productId: 'prod_MdYuD4PT0HjB7Q',
productPrice: 'price_1LuHn3EIRppAZNR0LNBhUNXN',
productDescription: 'Single Class - 30 Min',
productName: 'Trial Lesson',
productNumPrice: Promise { <pending> }
},

然而,getPrice函数运行良好,并返回所需的信息。。。由于某种原因,我觉得无法调用.map函数中的wait函数。我已经搜索了一些类似的问题,但无法理解主题,因为这些例子与我的情况大不相同。

您可以将async/await语法与map一起使用,但要解决map产生的承诺,您需要使用Promise.all

getOneToOneProductDetails = async (req, res, next) => {
let products = await stripe.products.list({
limit: 3,
})
products = await Promise.all(products.data.map(async (product) => {
if(product.active === true)
return {
productId: product.id,
productPrice: product.default_price,
productDescription: product.description,
productName: product.name,
productNumPrice: await this.getPrice(product.default_price)
}
}))
console.log(products)
res.send(products)
}

例如

const products = [{
id: 1,
default_price: 1,
name: 'name',
description: 'description'
}, {
id: 2,
default_price: 2,
name: 'name',
description: 'description'
}];

(async() => {
const result = await Promise.all(products.map(async(product) => {
return {
productId: product.id,
productPrice: product.default_price,
productDescription: product.description,
productName: product.name,
productNumPrice: await Promise.resolve(product.default_price)
}
}));
console.log(result)

})();

最新更新