如果这对某人有帮助,我设法开始使用具有以下配置的工作人员,使用 ember-cli >= 2.4.2 能够使用outputFile
:
//ember-cli-build.js
..
//don't prepend CDN to worker paths (or CORS issue)
fingerprint: {
exclude: ['worker'],
..
}
..
var app = new EmberApp(defaults, {
..
app.import('vendor/localforage.js');//use localforage outside of workers
app.import('vendor/localforage.js',outputFile:'assets/workers/localforage.js'});//use localforage inside of workers
app.import('vendor/worker_localforage.js',outputFile:'assets/workers/worker_localforage.js'});
app.import('vendor/worker_test_indexeddb.js',outputFile:'assets/workers/worker_test_indexeddb.js'});
});
然后工人代码:
//vendor/worker_localforage.js
importScripts('localforage.js');
self.onmessage = function(e) {
var namespace=e.data.namespace;
var msg=e.data.msg;
var data=e.data.data;
//console.log("msg to worker",namespace,msg);
if (msg==="load") {
localforage.getItem(namespace).then(function(res){
self.postMessage({msg:"load",data:res});
});
}
else if (msg==="persist") {
localforage.setItem(namespace,data).then(function(res){
self.postMessage({msg:"persist",data:res});
});
}
};
从应用程序中的任何位置调用工作人员:
self.worker=new Worker("assets/workers/worker_localforage.js");
var worker=self.worker;
prom2= new Ember.RSVP.Promise(function(resolve,reject){
worker.onmessage=function(e){
if (e.data.msg==="load") {
resolve(e.data.data);
}
}
});
worker.postMessage({namespace:self.adapterNamespace(),msg:"load"});