js实现方法(异步)调用多次顺序执行?
const updateNode = async (node: TCartType) => { const res = await postUpdateNode({
id,
name,
type: 'NODE',
data: node,
version: store.version + 1,
})
store.version = res.data.version
}
这个方法会被多次调用,就会发出多个请求,这时候就不能保证哪个先成功了,但是必须要顺序执行,请问怎么能做到按照调用的顺序执行成功后再执行下一个,如果这个时候又进来,放到队列最后,类似先进先出执行完成
回答:
你看,你都提到了“队列”,所以解决这个问题就是用队列啊。基本思路就是,
- 调用的时候,封装一个行为(函数),放入队列
- 触发对队列进行处理
而处理的时候,会依次 await 调用队列中封装的每一次行为,直到处理完。考虑到有可能在处理过程中被触发,所以要加一个标志来判断是否在处理中,如果已经在处理中,就不管了,否则启动处理过程。
示意代码(仅示例,没测试)
const updateNode = (() => { const queue = [];
let running = false;
function async run() {
if (running) { return; }
running = true;
while (queue.length) {
await queue.shift()();
}
running = false;
}
return (node: TCartType) => {
queue.push(async () => {
const res = postUpdateNode({});
store.version = res.data.version;
});
run();
}
})();
以上是 js实现方法(异步)调用多次顺序执行? 的全部内容, 来源链接: utcz.com/p/933015.html