Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

6 Commits

Repository files navigation

glua-async

An async/await implement for gopher-lua.

Installation

go get github.com/CuberL/glua-async

Example Usage

First, you need to modify your blocking function by wrapping the blocking part(sleep, i/o, etc) in async.AsyncRun. And the return values of the async.AsyncRun will be the return values of the await.

funcSleep(L*lua.LState) int {
sec:=L.CheckInt(1)
caller:=L.CheckString(2)
async.AsyncRun(func() []lua.LValue {
time.Sleep(time.Second*time.Duration(sec))
return []lua.LValue{lua.LString(caller)}
}, L)
return0
}

And you can use it in your function. Use async to start a coroutine and use await to wait some blocking result in an async function.

functionmain(str)
-- Aasync(function()
fori=3, 1, -1doresult=await(sleep, 1, "a")
print("it's "..result)
endend)
-- Basync(function()
fori=3, 1, -1doresult=await(sleep, 2, "b")
print("it's "..result)
endend)
-- Casync(function()
fori=3, 1, -1doresult=await(sleep, 3, "c")
print("it's "..result)
endend)
returnstrend

Finally, you can call main function, and you also need to wrap your function in async.WrapAsyncFunc.

L.CallByParam(lua.P{
Fn: async.WrapAsyncFunc(L, L.GetGlobal("main").(*lua.LFunction)),
NRet: 1,
Protect: true,
}, lua.LString("hello"))
fori:=1; i<=L.GetTop(); i++ {
log.Println(L.Get(i).String())
}

About

An async/await implement for gopher-lua.

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages