Opastream量控制,螺纹?

Node.js本身支持工作线程和subprocess的创build。 那些和Node.js一起工作的人可能熟悉stream控制库,如Async.js或Step。

现在,因为Opa在Node.js堆栈上运行,有没有办法使用Async.js库作为JavaScript模块?

有没有Opa语言的绑定允许线程或某种asynchronousstream量控制? 我怀疑没有,但我很好奇在Opa中实现线程或asynchronousstream量控制的可能select是什么?

*现在我知道我可以用非Opa语言将我的作品提交给另一个剧本,但这是我唯一的select吗?

在此先感谢,因为我是Opa的新手,并且正在努力了解它的function!

Opa编译器automaticaly将您的代码重写为asynchronous的Javascript代码。

这是Opa的function之一,你不应该照顾线程pipe理,它是由编译器默认处理。

而且Opa提供了一些并发原语来访问它的控制stream。

@callcc : continuation('a) -> 'a @spawn : 'a -> Cps.future('a) @wait : Cps.future('a) -> 'a 

@callcc允许访问当前的继续。 这里使用一个例子,从一个asynchronous函数构build一个同步函数:

 function ('a -> 'b) to_sync(('a, ('b -> void) -> void) fasync){ function (a){ @callcc(function(k){ fasync(a, Continuation.return(k, _)) }) } } 

@spawn在另一个“线程”上启动一个值的计算。 @wait是用来得到产生的价值。 作为伪例:

 function example(){ future = @spawn( x = fibo(30); jlog("End of spawn computation {x}"); {result : x} ) // ... jlog("do something before wait") result = @wait(future).result jlog("the result is [resulr}") } //Output of example is : // do something before wait // the result is 832040 

您还可以使用调度Scheduler 模块访问调度原语

Opa内置了对asynchronous服务器调用的支持。 不幸的是,目前还没有很好的logging。 但是请考虑:

 @async server function my_async_function() { Scheduler.wait(2000); #done = "async function done!" } function clicked() { my_async_function(); #clicked = "you clicked me!" } function go() { Resource.page("hello", ( <> <p>click this button:</p> <button onclick={function(_) { clicked() }}> clickme</button> <div id=#clicked/> <div id=#done/> </> )) } Uri.relative -> resource function start(uri) { match (uri.path) { | _ : go() } } Server.start(Server.http, { dispatch: start } ) 

(这与这个邮件列表线程中的例子类似,但是对于当前默认的Opa语法稍微简化并更新了。)