使用节点,是否可以等待数据库条目出现?

时间:2019-07-04 22:18:55

标签: javascript node.js

节点是否可以异步等待记录出现在数据库表中?

我使用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秒的时间。我觉得这样做不是很干净或不正确。我相信必须有一个更好的方法,但是查找该问题的结果很少。

0 个答案:

没有答案