如何在子块中获取父块定义的reqId值作为 fallback
如何在子函数中获取父函数定义的
reqId值? 你在父函数Paymentprocessing中声明了reqId,但调用子函数phonePeHandle时没有传递这个变量,导致子函数里访问reqId会提示未定义,且reqId需要作为requestId的兜底值。你的代码示例如下:
// Parent-block async function Paymentprocessing(body) { const reqId = uuid(); // 此处定义了reqId try { const Channels = payload?.payment_process?.entity?.data?.channel || payload.payment_process.entity.data.channel; switch (Channels) { case "phonePe": await phonePeHandle(body); break; } return {status: 200}; } catch (e) {} } // Child-block async function phonePeHandle(body){ if(body.event === constants.paymentMode.phonePe) { let requestId = payload.payment_process.entity.data.reqId || reqId; // 此处使用reqId但未定义 await phonePeService.callback(requestId, body); return {status: 200}; } }
下面是两种可行的解决方法:
方法一:将reqId作为参数传递给子函数
这是最直接的方案,调用子函数时把reqId作为额外参数传过去,子函数新增参数接收即可:
修改父函数的调用逻辑:
await phonePeHandle(body, reqId);
修改子函数的定义:
async function phonePeHandle(body, reqId){ if(body.event === constants.paymentMode.phonePe) { let requestId = payload.payment_process.entity.data.reqId || reqId; await phonePeService.callback(requestId, body); return {status: 200}; } }
方法二:利用闭包,将子函数定义在父函数内部
如果phonePeHandle只在Paymentprocessing函数内部使用,可以把它嵌套在父函数里,这样子函数就能直接访问父函数作用域中的reqId:
async function Paymentprocessing(body) { const reqId = uuid(); // 子函数定义在父函数内部,通过闭包访问reqId async function phonePeHandle(localBody){ if(localBody.event === constants.paymentMode.phonePe) { let requestId = payload.payment_process.entity.data.reqId || reqId; await phonePeService.callback(requestId, localBody); return {status: 200}; } } try { const Channels = payload?.payment_process?.entity?.data?.channel || payload.payment_process.entity.data.channel; switch (Channels) { case "phonePe": await phonePeHandle(body); break; } return {status: 200}; } catch (e) {} }
额外提示
原代码里有几处语法错误需要修正:
func是错误的关键字,应该改为function,或者使用箭头函数的正确写法:const Paymentprocessing = async (body) => {- 代码中的
payload变量未定义,需要确保它能被当前作用域正确访问到
内容的提问来源于stack exchange,提问作者Gurdeep
相关产品推荐
相关产品推荐

