У меня есть следующий код. Я хочу взять результат переменной продукта и поместить их в массив за пределами lineItems.data.map, чтобы я мог проанализировать массив и отправить запрос с его содержимым. Я немного застрял в том, как это сделать. Я попытался создать пустой массив и нажать на него, но это не сработало. Любая помощь будет здорово. Спасибо.
Массив может быть внутри первой асинхронной функции, но я не могу понять это на данный момент.
async function (err, lineItems) {
await lineItems.data.map(async (item) => {
console.info(item);
const product = await stripe.products.retrieve(item.price.product);
return product;
});
// I want an array here containing the product
}
Отвечает ли это на ваш вопрос? Как вернуть ответ при асинхронном вызове?
Прямо сейчас lineItems.data.map
возвращает массив обещаний. Вы не можете await
сделать это напрямую, но Promise.all
позволит вам просто ждать множество обещаний!
async function foo(err, lineItems) {
const arr = await Promise.all(lineItems.data.map((item) => {
return stripe.products.retrieve(item.price.product);
}));
// resolved array should be here
console.info(arr);
}
foo();
Вот тривиальный пример, показывающий все это в действии:
const prom = (num) => new Promise(res => res(num * 2));
async function foo() {
const vals = await Promise.all([1, 2, 3].map(x => prom(x)));
console.info(vals);
}
foo();
Отвечает ли это на ваш вопрос? Как синхронизировать функцию асинхронной карты в javascript