回调函数内的Promise是否会在每次回调调用时执行?
回调函数内部的Promise是否会在该回调函数每次被调用时都执行?
嘿,这个问题问得很关键!直接给你结论:是的,每次这个回调函数被调用时,内部的Promise相关代码都会执行,下面结合你给出的代码具体解释:
看你这段代码:
request.post({ headers: { 'content-type': 'text/xml', SOAPAction: 'http://tempuri.org/enquireFines' }, url: meta.URL, body: requestBody }, (error, response, body) => { apiLogs.update({ Response: body, Status: 'SUCCESS' }, { where: { TransactionId: meta.TRANSACTIONID }}).then(() => {}); });
这里的逻辑是:
- 每当
request.post发起的HTTP请求完成(不管请求成功还是失败,只要进入了这个回调函数),回调函数的函数体就会被完整执行一遍 - 函数体里的
apiLogs.update(...)会被调用,这个方法返回一个Promise实例,随后的.then(() => {})也会被挂载到这个新的Promise上 - 换句话说,每次回调触发,都会创建一个全新的Promise实例并执行对应的异步操作
额外提个小建议:你现在的代码不管请求有没有报错(error是否存在)都会执行apiLogs.update并标记状态为SUCCESS,这可能不符合业务逻辑。如果想只在请求成功时执行这个Promise操作,可以加个条件判断:
(error, response, body) => { if (!error && response.statusCode === 200) { // 按需调整判断条件 apiLogs.update({ Response: body, Status: 'SUCCESS' }, { where: { TransactionId: meta.TRANSACTIONID }}).then(() => {}); } else { // 可以在这里处理请求失败的日志更新 apiLogs.update({ Status: 'FAILED', Error: error?.message }, { where: { TransactionId: meta.TRANSACTIONID }}).then(() => {}); } }
内容的提问来源于stack exchange,提问作者Ilyas Shah
相关产品推荐
相关产品推荐

