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

}

这个方法会被多次调用,就会发出多个请求,这时候就不能保证哪个先成功了,但是必须要顺序执行,请问怎么能做到按照调用的顺序执行成功后再执行下一个,如果这个时候又进来,放到队列最后,类似先进先出执行完成


回答:

你看,你都提到了“队列”,所以解决这个问题就是用队列啊。基本思路就是,

  1. 调用的时候,封装一个行为(函数),放入队列
  2. 触发对队列进行处理

而处理的时候,会依次 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

回到顶部