调用Stripe API返回undefined数组问题求助
问题原因及解决方法
问题根源
你的代码返回全undefined数组,核心原因是对Stripe SDK的Promise回调格式理解错误:
Stripe的stripe.checkout.sessions.listLineItems返回的是标准Promise,它的.then()回调仅接收成功返回的结果作为唯一参数,并非Node.js传统的错误优先(err, result)格式。你当前写的(err, lineItems)里,err实际是接口返回的lineItems数据,而lineItems是undefined,所以返回的lineItems自然是undefined,最终Promise.all得到的就是全undefined的数组。
解决方法
方法一:修正Promise.then参数写法
直接简化回调,只保留成功结果的参数,甚至可以省略多余的.then直接返回Promise:
const promises = sessionsIds.map(id => stripe.checkout.sessions.listLineItems(id, { limit: 100 }) ); const usernames = await Promise.all(promises);
方法二:用async/await重构(更易读)
在map中使用async函数,直接await每个请求:
const promises = sessionsIds.map(async (id) => { const lineItems = await stripe.checkout.sessions.listLineItems(id, { limit: 100 }); return lineItems; }); const usernames = await Promise.all(promises);
额外建议:添加错误处理
如果某个请求失败,Promise.all会直接抛出错误,建议用try/catch包裹处理异常:
try { const promises = sessionsIds.map(id => stripe.checkout.sessions.listLineItems(id, { limit: 100 }) ); const usernames = await Promise.all(promises); // 处理获取到的lineItems数据 } catch (error) { console.error('获取会话商品明细失败:', error); // 这里可以添加错误后的降级逻辑 }
内容的提问来源于stack exchange,提问作者Lazarusss
相关产品推荐
相关产品推荐

