异步函数未等待变量填充完成即执行的问题求助
异步Promise未等待导致的数据填充问题解决方案
问题核心
你的代码中registar_compra函数里的console.log(params)输出的RequestItems.HISTORICO并非预期的结构化数据,而是一组Promise对象。原因是create_params函数中使用async回调的map方法时,map不会等待异步操作完成,直接返回Promise数组,且你没有等待这些Promise解析就返回了结果。
解决方案
需要用Promise.all等待map生成的所有Promise完成解析,再将结果赋值给对应的字段。修改后的代码如下:
export async function registar_compra(compra) { const params = await create_params(compra) console.log(params) } async function create_params(compra) { const { numero_socio, nome_tuna, nome_completo, produtos_selecionados } = compra // 等待所有异步生成的PutRequest对象解析完成 const historicoItems = await Promise.all( produtos_selecionados.map(async (produto, index) => ({ PutRequest: { Item: { id: "compra", data_dia: await get_data(index), numero_socio: numero_socio, nome_tuna: nome_tuna, nome_completo: nome_completo, quantidade: produto.quantidade, nome_produto: produto.nome_produto, preco_quantidade: produto.preço_quantidade } } })) ) const result = { RequestItems: { ['HISTORICO']: historicoItems } } return result } function get_data(index) { return new Promise(resolve => { setTimeout(() => { resolve(new Date().toISOString()); }, 12 * index); }); }
关键修改说明
produtos_selecionados.map(async...)会返回一个Promise数组,每个Promise对应一个带data_dia的PutRequest对象- 使用
await Promise.all(...)等待所有Promise完成解析,得到实际的对象数组 - 将解析后的数组赋值给
RequestItems.HISTORICO,确保返回的result中所有数据都已填充完成
内容的提问来源于stack exchange,提问作者bestry
相关产品推荐
相关产品推荐

