ios icon indicating copy to clipboard operation
ios copied to clipboard

Missing "Worker" Functionality in ios v8

Open NathanaelA opened this issue 2 years ago • 0 comments

So this is a issue where v8 is missing something that was used in JSC.

  1. MainFile -> let worker = new Worker('primary.worker');
  2. Primary.Worker -> let subWorker = new Worker('sub.worker');

CONSOLE ERROR: Error in Primary.Worker ReferenceError: Worker is not defined

Other information:

console.log(Object.keys(global)); v8: Inside Worker

CONSOLE LOG: [console, __runtimeVersion, postMessage, close, performance, __time, __drainMicrotaskQueue, __releaseNativeCounterpart, gc, global, self, __collect, require, interop, __extends, CGPointMake, CGRectMake, CGSizeMake, UIEdgeInsetsMake, NSMakeRange, __decorate, __param, ObjCClass, ObjCMethod, ObjC, ObjCParam, NSObject, NativeScriptHasInitGlobal, NativeScriptGlobals, __assign, __asyncDelegator, __asyncGenerator, __asyncValues, __await, __awaiter, __classPrivateFieldGet, __classPrivateFieldSet, __createBinding, __exportStar, __generator, __importDefault, __importStar, __makeTemplateObject, __metadata, __read, __rest, __spread, __spreadArrays, __values, moduleResolvers, registerModule, _unregisterModule, _isModuleLoadedForUI, registerWebpackModules, moduleExists, loadModule, getRegisteredModules, moduleMerge, zonedCallback, System, Deprecated, Experimental, onmessage, onerror]

JSC: Inside Worker

CONSOLE LOG file: app/webpack:/testworker/app/test.worker.js:14:0: WeakRef,Worker,CGPointMake,CGRectMake,CGSizeMake,UIEdgeInsetsMake,NSMakeRange,__decorate,__param,ObjCClass,ObjCMethod,ObjC,ObjCParam,NativeScriptHasInitGlobal,NativeScriptGlobals,__assign,__asyncDelegator,__asyncGenerator,__asyncValues,__await,__awaiter,__classPrivateFieldGet,__classPrivateFieldSet,__createBinding,__exportStar,__generator,__importDefault,__importStar,__makeTemplateObject,__metadata,__read,__rest,__spread,__spreadArrays,__values,moduleResolvers,registerModule,_unregisterModule,_isModuleLoadedForUI,registerWebpackModules,moduleExists,loadModule,getRegisteredModules,moduleMerge,zonedCallback,System,Deprecated,Experimental,onmessage,onerror

Example Code:

ns create test --js replace main-view-model.js

import { Observable } from '@nativescript/core'

function getMessage(counter) {
  if (counter <= 0) {
    return 'Hoorraaay! You unlocked the NativeScript clicker achievement!'
  } else {
    return `${counter} taps left`
  }  
}

export function createViewModel() {
  const viewModel = new Observable()
  viewModel.counter = 42
  viewModel.message = getMessage(viewModel.counter);
  let worker;

  viewModel.onTap = () => {
    viewModel.counter--
    viewModel.set('message', getMessage(viewModel.counter));
    try {
      if (!worker) {
        console.log("Creating Worker");
        worker = new Worker("./test.worker");
      }
      console.log("Sending to worker...");
      worker.postMessage("Hi from Main");
    } catch (err) {
      console.error(err, err.stack);
    }
  }

  return viewModel
}

Add: test.worker.js

const glb = require("@nativescript/core/globals");
glb.initGlobal();

let worker;

self.onmessage = (m) => {
   console.log("Got Message in Worker 1", m);
   if (!worker) {     
     // This will throw the Reference Error
     worker = new Worker("./temp.worker");
   }
   worker.postMessage("Hi From Worker 1");
};

self.onerror = (m) => {
  console.error("Error in Worker 1", m);  
};

Add temp.worker.js

const glb = require("@nativescript/core/globals");
glb.initGlobal();

console.log("Starting Worker 2");

self.onmessage = (m) => {
   console.log("Got Message in Worker 2", m);
};

self.onerror = (m) => {
  console.error("Error in Worker 2", m);  
};

NathanaelA avatar May 05 '22 19:05 NathanaelA