js 代码运行中插入交互

Posted Aloe_n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 代码运行中插入交互相关的知识,希望对你有一定的参考价值。

js 代码运行中插入交互

背景

最近突发奇想,如果能在 js 运行时插入用户操作,是否就可以看到每一步的状态了呢?

以冒泡排序为例,最终实现的效果是这样的:

思路

我们知道,如果代码中 await 一个 promise,那么这行代码需要等到 promise 状态为 resolved 时才能向下继续执行.

例如:

await new Promise(resolve=>{}),这样代码将会一直在这里等待下去,因为这个 Promise 的状态为pending.

有了这个思路,我们只需想办法将这个 promise 的状态改为 resolved,就可以在代码终端后继续执行.

如何控制一个 promise 的状态

代码很简单,调用 func()时,执行了 p 的 resolve()方法,将 p 的状态改为了 resolved.

res = [];
let func = undefined;
let p = new Promise(resolve => (func = () => resolve()));

console.log(p);
func();
console.log(p);

结果如下:

Promise { <pending> }
Promise { undefined }

封装

这样封装之后只需要在需要暂停的地方插入 await nextStepPromiseFactory();

let func = undefined;

function nextStepPromiseFactory() {
  return new Promise(resolve => (func = () => resolve()));
}

for (let i = 0; i < 10; i++) {
  await nextStepPromiseFactory();
  console.log(i);
}

将以上代码粘贴进浏览器的控制台,效果如下:

以上是关于js 代码运行中插入交互的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

KDoc:插入代码片段

angularJS使用ocLazyLoad实现js延迟加载

代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

区块链-前端交互第四篇:认识 ethers.js并运行测试代码