Javascript Opa流量控制,穿线?
Node.js本身支持工作线程和创建子进程。 使用过Node.js的人可能熟悉流控制库,如Async.js或Step 既然Opa在Node.js堆栈上运行,那么有没有办法将Async.js库用作javascript模块 Opa语言是否有任何绑定允许线程或某种异步流控制? 我怀疑没有,但我很好奇在Opa中实现线程或异步流控制的可能选项是什么 *现在我知道我可以用非Opa语言将我的工作交给另一个脚本,但这是我唯一的选择吗Javascript Opa流量控制,穿线?,javascript,multithreading,node.js,asynchronous,opa,Javascript,Multithreading,Node.js,Asynchronous,Opa,Node.js本身支持工作线程和创建子进程。 使用过Node.js的人可能熟悉流控制库,如Async.js或Step 既然Opa在Node.js堆栈上运行,那么有没有办法将Async.js库用作javascript模块 Opa语言是否有任何绑定允许线程或某种异步流控制? 我怀疑没有,但我很好奇在Opa中实现线程或异步流控制的可能选项是什么 *现在我知道我可以用非Opa语言将我的工作交给另一个脚本,但这是我唯一的选择吗 提前感谢,因为我是Opa的新手,正在尝试了解它的功能 Opa内置了对异步服务器
提前感谢,因为我是Opa的新手,正在尝试了解它的功能 Opa内置了对异步服务器调用的支持。不幸的是,目前还没有很好的文档记录。但请考虑:
@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 }
)
@async服务器函数my\u async\u函数(){
等等(2000年);
#done=“异步函数完成!”
}
函数单击(){
我的异步函数();
#clicked=“你点击了我!”
}
函数go(){
Resource.page(“你好”(
单击此按钮:
点击我
))
}
Uri.relative->资源函数启动(Uri){
匹配(uri.path){
|(:go)
}
}
Server.start(Server.http,
{分派:开始}
)
(这与中的示例类似,但对当前的默认Opa语法进行了一些简化和更新。)Opa内置了对异步服务器调用的支持。不幸的是,目前还没有很好的文档记录。但请考虑:
@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 }
)
@async服务器函数my\u async\u函数(){
等等(2000年);
#done=“异步函数完成!”
}
函数单击(){
我的异步函数();
#clicked=“你点击了我!”
}
函数go(){
Resource.page(“你好”(
单击此按钮:
点击我
))
}
Uri.relative->资源函数启动(Uri){
匹配(uri.path){
|(:go)
}
}
Server.start(Server.http,
{分派:开始}
)
(这与中的示例类似,但对当前默认Opa语法进行了一些简化和更新。)Opa编译器会自动将代码重写为异步Javascript代码 这是Opa的一个特性,您不应该负责线程管理,它是由编译器默认处理的 此外,Opa还提供了一些并发原语来访问其控制流
@callcc : continuation('a) -> 'a
@spawn : 'a -> Cps.future('a)
@wait : Cps.future('a) -> 'a
其中@callcc
允许访问当前的延续。下面是使用异步函数构建同步函数的示例:
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
您还可以使用
调度器Opa编译器访问scheduling原语,自动将代码重写为异步Javascript代码
这是Opa的一个特性,您不应该负责线程管理,它是由编译器默认处理的
此外,Opa还提供了一些并发原语来访问其控制流
@callcc : continuation('a) -> 'a
@spawn : 'a -> Cps.future('a)
@wait : Cps.future('a) -> 'a
其中@callcc
允许访问当前的延续。下面是使用异步函数构建同步函数的示例:
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
您还可以使用调度程序访问调度原语
谢谢!正是我想要的。除了Opa手册文档之外,还有关于Opa学习资源的建议吗?谢谢!正是我想要的。除了Opa手册文档外,对良好的Opa学习资源有何建议?