-1
async function sellerSelection() {
    let selectedSellerArray = [];
    await orders.forEach(async (order) => {
        let orderItems = await orderItemsObj.findMany({
            where: { order_id: order.id, status: "created" },
        });
        console.log(orderItems.length, "order items");
        orderItems.forEach(async (orderItem) => {
            const sellerSelect = await _calculateHighProfitSeller(
                order.id,
                orderItem
            );

            selectedSellerArray.push(sellerSelect.seller_id);
        });
    });
    setTimeout(() => {
        console.log(selectedSellerArray, "selectedSellerArray");
    }, 1000);
}

Hello everybody, I am learning nodejs and dont have a proper grasp of asynchronous stuff in it. So, in the above code if i dont use setTimeOut(), the _calculateHighProfitSeller() wont have returned values fast enough, but the code gets executed anyway so I get an empty anything. What I want to do is execute the code inside setTimeOut() only after _calculateHighProfitSeller() calls have returned all its values.

Amit Maharjan
  • 87
  • 1
  • 7

1 Answers1

-3

Use .map instead of .forEach

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

async function sellerSelection() {
    let selectedSellerArray = await orders.map(async (order) => {
        let orderItems = await orderItemsObj.findMany({
            where: { order_id: order.id, status: "created" },
        });
        console.log(orderItems.length, "order items");
        return await orderItems.map(async (orderItem) => {
            let { seller_id } = await _calculateHighProfitSeller(
                order.id,
                orderItem
            );
            return seller_id;
        });
    });
    console.log(selectedSellerArray, "selectedSellerArray");
}
ihodonald
  • 745
  • 1
  • 12
  • 27
  • Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackoverflow.com/rooms/220215/discussion-on-answer-by-ihodonald-how-to-solve-this-problem-without-using-settim). – Samuel Liew Aug 21 '20 at 13:50