得到未定义的数组,承诺



从下面的代码我得到未定义的数组,但说实话,我不知道为什么和如何修复它…

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);

传递给它一个函数作为第一个参数,它得到一个参数(解析后的值)。

最新更新