js顺序同步执行,本次执行需拿到上次的结果,可自动可手动

 

背景

实际场景中,需要同步执行多次,每次执行需要拿到上次的结果,充当本次的参数;在此基础上,既要满足自动实现,还要实现手动实现上面的效果。

方案

页面写两个button,给其绑定点击事件:

const begin = document.getElementById("begin");const restart = document.getElementById("restart");

实现这么一个方法:

// 利用promise,将传进去的方法在promise里面执行,执行完,将结果返回,再用try catch包裹下,避免报错导致用额面崩掉const handle = (callback) => {  return new Promise((resolve, reject) => {    try {      const res = async () => {        return await callback();      };      // 返回结果      resolve(res);    } catch (err) {      reject(err, "failed");    }  });};

模拟一个实际场景中的接口请求或异步等待操作

// 这个方法是模拟实际业务中的接口请求的,到时候替换成接口就好了const test1 = (val, delay) => {  return new Promise((resolve, reject) => {    setTimeout(() => {      resolve("等到了", val);    }, delay);  });};

使用:

let myRes;let myRes2;
// 连续执行调用begin.onclick = async function () {  console.log("1--前");
  myRes = await handle(() => test1(11, 3000));  console.log("1--后");
  console.log("12--前");  // 单独点击这个方法,就是自动执行了  myRes2 = await handle(() => test1(myRes, 5000));  console.log("res3", myRes2);  console.log("12--后");};
// 手动续起来执行,点击完上面的 再点击这个,就相当于手动点击两次,但是效果是拿到了第一次返回的结果才执行这个里面的方法,虽然在点击的时候,上面的begin方法还没执行完,就点击了restart,但是还是实现了顺序同步等待restart.onclick = async function () {  console.log("2--前");
  const res3 = await handle(() => test1(myRes2, 5000));  console.log("res3", res3);  console.log("2--后");};

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/80500.html

(0)
guozi's avatarguozi
上一篇 2024年5月31日 上午9:50
下一篇 2024年5月31日 上午9:53

相关推荐

  • 如何使用百度刷排名推广拉新客户?

    想要在网络世界中获得更多曝光,吸引更多的客户?搜索引擎优化是您必不可少的利器!它能够帮助您提升网站在搜索引擎中的排名,让更多人看到您的网站。而百度作为国内最大的搜索引擎,其排名更是…

    行业资讯 2024年3月29日
    0
  • seo查询收录历史

    想要了解自己的网站在搜索引擎中的表现如何,就必须要知道SEO查询收录历史这个概念。它不仅可以让你了解网站在搜索引擎中的收录情况,还能帮助你分析网站的SEO优化效果。那么,什么是SE…

    行业资讯 2024年3月28日
    0
  • 网站被网络屏蔽,被屏蔽了网站怎么打开

    如果您认为gpt4网站被误屏蔽且上述方法无法解决,请向相关部门投诉。例如,在中国大陆,您可以向工信部、公安部等投诉,并提交相关证据。 5. 谨慎使用SEO 技术 在某些情况下,网站…

    行业资讯 2024年5月12日
    0
  • 搬瓦工ipv6,搬瓦工vps被官方封禁

    作为互联网行业重要的服务提供商,其IP被封的消息引起了广大用户的关注。到底是什么原因导致瓦工的IP 被封锁? 如何判断我的IP 是否被封锁? 如果我的IP 被封锁,我该怎么办? 更…

    行业资讯 2024年5月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注