从下面的代码我得到未定义的数组,但说实话,我不知道为什么和如何修复它…
const promises = sessionsIds.map((id) =>
stripe.checkout.sessions
.listLineItems(id, { limit: 100 })
.then((err, lineItems) => {
return lineItems;
})
);
const usernames = await Promise.all(promises);
我也尝试过async await,但结果仍然相同。
假设stripe.checkout.sessions.listLineItems(id, { limit: 100 })
返回一个常规的,标准的承诺,那么问题是你正在处理的是一个常规的异步回调与(err, value)
作为函数的参数。这不是.then()
的工作原理。.then()
的第一个参数是一个函数,将使用一个参数(已解析的值)调用该函数。事实上,你可能根本不需要.then()
。
你可以改成:
const promises = sessionsIds.map((id) =>
stripe.checkout.sessions.listLineItems(id, { limit: 100 })
);
const usernames = await Promise.all(promises);
或者,进一步简化:
const usernames = await Promise.all(sessionsIds.map((id) =>
stripe.checkout.sessions.listLineItems(id, { limit: 100 })
));
注意,这里不需要.then()
处理程序(假设stripe.checkout.sessions.listLineItems(id, { limit: 100 })
已经返回一个promise)。如果您想使用.then()
处理程序,它将像这样:
const promises = sessionsIds.map((id) =>
stripe.checkout.sessions.listLineItems(id, { limit: 100 })
.then((lineItems) => {
console.log(lineItems);
return lineItems;
});
);
const usernames = await Promise.all(promises);
传递给它一个函数作为第一个参数,它得到一个参数(解析后的值)。