Фабрика, создающая обёртку, которая запускает функцию в отдельном потоке в результате чего её падение не приводит к падению запустившего её кода. потоки не параллельны!
var FThread= new function(){
Version: 3
Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in'
License: 'public domain'
Implementation:
var root= document.documentElement
var FThread= function( proc ){
var thread= root.addEventListener
? function( ){
var res, self= this, args= arguments
root.addEventListener( 'launch thread', function( ){
root.removeEventListener( 'launch thread', arguments.callee, false )
res= thread.proc.apply( self, args )
}, false )
var event= document.createEvent( 'UIEvents' )
event.initEvent( 'launch thread', false, false )
root.dispatchEvent( event )
return res
}
: function( ){
var res, self= this, args= arguments
root.attachEvent( 'onpropertychange', function( ){
root.detachEvent( 'onpropertychange', arguments.callee )
delete root[ 'launch thread' ]
res= thread.proc.apply( self, args )
} )
root[ 'launch thread' ]= null
return res
}
thread.proc= proc
return thread
}
Export: return FThread
Usage:
var inverse= FThread(function( a ){
if( a === 0 ) throw 'division by zero'
return 1/a
})
console.log([ inverse( 0 ), inverse( 1 ) ])
// prints [ undefined, 1 ] and exception 'division by zero' in console log
}
код не актуален ввиду новой версии:
FTread, исполнение функций в отдельных потоках