13
2024
09

Skultpjs手动停止运行

好多在线写pyhton的,都会用到Skulpt.js。

运行之后,可能会一直loop。

如何实现用户手动点“停止”按钮,停止程序。

不知道别人家是怎么实现的。

从网上找到一个方法:

https://github.com/skulpt/skulpt/issues/1295#:~:text=Is%20there%20a%20way%20to%20stop%20the%20execution%20of%20skulpt

How to terminate skulpt when in infinite loop (using suspensions) · Issue #357 · skulpt/skulpt (github.com)

原理就是:

先记录下默认的超时时间(也可以不记录,使用一个很大的数)

var defaultTimeLimit = Sk.execLimit;

需要停止的时候,修改超时时间,设置很短,等报错

Sk.execLimit = 1

自定义超时报错,把超时时间再改回来

var stopMsg = "Stopped (not really a Timeout)";
Sk.timeoutMsg = function() {
 Sk.execLimit = defaultTimeLimit;
 return stopMsg;
}

运行报错那里,忽略掉这个错误。

Sk.misceval.asyncToPromise(function () {
  return Sk.importMainWithBody("fileName", false, "code", true);
})then(
  function (mod) {
    console.log("success")
  },
  function (err) {
    var msg = err.toString();
    if(msg.indexOf(stopMsg)!=-1) return;
    console.log(msg);
  }
);


« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。