首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单击事件javascript上停止异步函数?

如何在单击事件javascript上停止异步函数?
EN

Stack Overflow用户
提问于 2021-08-01 21:04:12
回答 1查看 708关注 0票数 2

我的异步功能和承诺如下:

代码语言:javascript
复制
Sort.bubbleSort = function () {
  const timer = (ms) => new Promise((res) => setTimeout(res, ms));
  async function sort() {
        for(){
             // i want to delay for every loop that's why I used async function and 
             //promise and timer here.
             await timer(time);
         }
   
}
// calling async function here
    sort();
}

我在具有id排序的click元素上调用bubblesort函数。

代码语言:javascript
复制
document.getElementById("sort").addEventListener("click", Sort.bubbleSort);

所以函数开始执行。在单击带有id随机数据的元素后,我希望停止该函数。

在这里我需要解决办法:

代码语言:javascript
复制
document.getElementById("random-data").addEventListener("click", function () {
  Sort.bubblesort().stop() // need to stop or pause
}

这是现场链接。你可以很容易地理解我到底想要什么,问题是什么。

现场演示链接 x- Github储存库链接

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 22:37:26

像这样吗?

代码语言:javascript
复制
const Sort = {
  bubbleSort() {
    const timer = (ms) => new Promise((res) => setTimeout(res, ms));

    async function sort(self) {
      for (let i = 0; i <= 100; i++) {
        if (self.abort) {
          self.abort = false;
          return;
        }
        console.log(i);
        await timer(1000);
      }
    }

    sort(this);
  },

  bubbleSortStop() {
    this.abort = true;
  }
};

document.getElementById("sort")
  .addEventListener("click", Sort.bubbleSort.bind(Sort));

document.getElementById("random-data")
  .addEventListener("click", Sort.bubbleSortStop.bind(Sort));
代码语言:javascript
复制
<button id="sort">sort</button>

<button id="random-data">stop</button>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68614344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档