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
}

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

阅读 2.5k
1 个回答

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

  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();
    }
})();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题