最近工作中遇到了一个问题,简单来说就是我先调后端的接口,然后等后端的 mqtt 推送来数据,判断数据是不是我这次想要的数据,然后才执行下一步的操作。遇到这个问题,我首先就想到了用 promise 去做,但是如果后端的 mqtt 一直不推送过来,我该怎么弄。所以我还需要一个超时处理,超时就用到了定时器去做,既然有了定时器,如果用户在定时器触发之前退出了当前页面怎么弄,所以我还需要在页面退出时清除定时器。下面就是我的大概代码。
let time = null;
//清除定时和数据监听
function clear() {
clearTimeout(time);
//并且清除数据监听
}
function sendMessage() {
clear();
return new Promise((resolve, reject)=>{
//超时后直接 reject
time = setTimeout(()=>{
reject();
clear();
}, 3000);
//监听 mqtt 推送过来的数据,如果收到正确的数据则清除数据监听和超时处理
//调用接口发送数据,如果发送失败则清除定时和数据监听,直接 reject
})
}