worker.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // worker.js
  2. self.addEventListener('message', ({ data }) => {
  3. // console.log(data)
  4. const { type, functionString, functionName, params } = data
  5. // 校验函数字符串是否合法,是否含有parse和send函数
  6. if (type === 'validateFunctionString') {
  7. try {
  8. eval(functionString)
  9. } catch (_err) {
  10. // throw new Error('请确保语法正确')
  11. self.postMessage({ isOk: false, message: '请确保语法正确' });
  12. }
  13. try {
  14. if (parse) {
  15. try {
  16. if (send) {
  17. self.postMessage({ isOk: true, data: 'xxx' });
  18. }
  19. } catch (_err) {
  20. // throw new Error('请确保含有【send】函数')
  21. self.postMessage({ isOk: false, message: '请确保含有【send】函数' });
  22. }
  23. }
  24. } catch (_err) {
  25. self.postMessage({ isOk: false, message: '请确保含有【parse】函数' });
  26. // throw new Error('请确保含有【parse】函数')
  27. }
  28. return
  29. }
  30. // 执行函数
  31. if (type === 'runFunction') {
  32. eval(functionString)
  33. try {
  34. const func = eval(functionName)
  35. // 先尝试转换为json,如果失败再当做字符串使用
  36. try {
  37. const parseParams = JSON.parse(params)
  38. const data = func(parseParams)
  39. self.postMessage({ isOk: true, data });
  40. } catch (_err) {
  41. const data = func(params)
  42. self.postMessage({ isOk: true, data });
  43. }
  44. } catch (_err) {
  45. self.postMessage({ isOk: false, message: _err.message });
  46. }
  47. return
  48. }
  49. });