节点是否可以异步等待记录出现在数据库表中?
我使用SMS服务,在该服务中,我向API端点发送POST请求,并在其中收到sms-id(uuid),然后将“传递报告”作为XML发送到服务器上的API端点;例如。 sms.mydomain.com。
此sms-id用于匹配“投放报告”中的reportId字段。我的端点发送/接收此传递报告可能需要1到60秒的时间,然后将其解析并插入到数据库表中。
到目前为止,我已经使用一个简单的超时脚本来检查是否已将一个具有reportId与sms-id匹配的记录插入到表中。已对该脚本进行了一些编辑以清楚显示我的用例和设置。
const axios = require('axios');
const setAsyncTimeout = (cb, timeout = 0) => new Promise(resolve => {
setTimeout(() => {
cb();
resolve();
}, timeout);
});
const url = 'https://api.mydomain.com/v1/get/7654fec9-33ba-4881-931d-0e6f4d7de710';
const getData = async url => {
try {
const response = await axios.get(url);
const data = response.data;
await setAsyncTimeout(() => {
// Do whatever with the returned Delivery Report here
}, 30000);
} catch (error) {
// Add entry to monolog. Endpoint returns json or 404/500
$log->error(`Could not find a Delivery Report with this ID.\n${error}`);
}
};
getData(url);
使用上面的代码,如果在给定的SMS-id和reportId匹配的地方找到了传递报告,则它将表作为JSON返回以进行进一步处理,如果找不到匹配的传递报告,则返回404 HTTP错误消息
虽然此方法确实有效,但是它错过了大约15-20%的报告的检查,这些报告花费了我的端点超过30秒的时间。我觉得这样做不是很干净或不正确。我相信必须有一个更好的方法,但是查找该问题的结果很少。