通用场景
在应用A中点击按钮,调起了应用B,应用B在启动后自动执行了一些动作(比如打开某个页面),像这种类似自动化的操作是怎么实现的呢?
真实场景
应用A中有一个投注签到功能,用户需要在其他应用中跳转到应用A中来自动签到。
一些思考
- 他们的关系应该是"一对一"的,也就是用户在其他应用中每点一次按钮,都会跳转到应用A中执行相应的逻辑。
- 并不是一跳转过来就无脑执行,而是在相应的时机执行,比如是进入页面后,数据加载完成后执行它相应的动作。
实现思路
1、先收集从其他应用调过来的意图
javascript
export default class ActionQueue {
static queue = [];
static add(data) {
const _data = Array.isArray(data) ? data : [data];
ActionQueue.queue.push(..._data);
}
}
javascript
ActionQueue.add({
_actionType: 1001,
});
2、在指定时机取出该意图进行相应的执行
javascript
static getActionData(_actionType) {
const index = ActionQueue.queue.findIndex(
v => v._actionType === _actionType,
);
if (index !== -1) {
const action = ActionQueue.queue[index];
ActionQueue.queue.splice(index, 1);
return action;
}
}
在相应的时机执行该意图
javascript
async function getData(){
const res = await fetchData()
...
//执行
const actionData = ActionQueue.getActionData(
ActionType: 1001,
);
if (actionData) {
...//做相应的动作
}
}
- 完整类
javascript
export default class ActionQueue {
static queue = [];
static add(data) {
const _data = Array.isArray(data) ? data : [data];
ActionQueue.queue.push(..._data);
}
static clear(_actionType) {
if (!_actionType) {
ActionQueue.queue = [];
return;
}
ActionQueue.queue = ActionQueue.queue.filter(
v => v._actionType !== _actionType,
);
}
static getActionData(_actionType) {
const index = ActionQueue.queue.findIndex(
v => v._actionType === _actionType,
);
if (index !== -1) {
const action = ActionQueue.queue[index];
ActionQueue.queue.splice(index, 1);
return action;
}
}
}