Launch Week Day 3: Introducing Organization Notifications in Socket.Learn More
Socket
Book a DemoSign in
Socket

github.com/huangdaiyi/glua-async

Package Overview
Dependencies
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/huangdaiyi/glua-async

Source
Go Modules
Version
v0.0.0-20190614102843-43f22221106d
Version published
Created
Source

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.


func Sleep(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)

    return 0
}

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.

function main(str)
    -- A
    async(function()
        for i=3, 1, -1 do
            result = await(sleep, 1, "a")
            print("it's "..result)
        end
    end)

    -- B
    async(function()
        for i=3, 1, -1 do
            result = await(sleep, 2, "b")
            print("it's "..result)
        end
    end)
    
    -- C
    async(function()
        for i=3, 1, -1 do
            result = await(sleep, 3, "c")
            print("it's "..result)
        end
    end)

    return str
end

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"))

for i := 1; i <= L.GetTop(); i++ {
    log.Println(L.Get(i).String())
}

FAQs

Package last updated on 14 Jun 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts