ios
ios copied to clipboard
Missing "Worker" Functionality in ios v8
So this is a issue where v8 is missing something that was used in JSC.
- MainFile -> let worker = new Worker('primary.worker');
- 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);
};