Comments (4)
time.Sleep
blocks the calling groutine within the go context. It is similar to thread.Sleep in other languages, so from the perspective of goja, your delay function is a synchronous function that takes one second to return. Instead, you would need to return a Promise which is resolved after 1 second.
from goja.
Hi @mccolljr thanks for the reply.
I change delay function into this (HTTP Request using resty package)
vm.Set("delay", func(id string) string {
// Create a new Resty client
client := resty.New()
// Initialize a new request
request := client.R()
// request to public API
resp, err := request.Get("https://jsonplaceholder.typicode.com/todos/" + id)
if err != nil {
return err.Error()
}
return string(resp.Body())
})
But I still got same result (synchronous function). I think this is because vm.Set
define sync function not async function
Can I define async function using vm.Set
or other method?
from goja.
In Javascript, including in the goja engine, an "async function" is any function that returns a Promise value. Neither of your functions return a Promise value. The goja runtime is treating both functions as synchronous functions because they are.
If you want an async function, you will have to have a look at Runtime.NewPromise.
You will need to follow the example from the documents. You need an event loop, and you need to spawn a separate goroutine to handle the blocking work (like sending an http request or sleeping), and arrange for this goroutine to resolve the Promise value. Please note that the documentation for this function states that you cannot just call resolve
or reject
from another goroutine. You need an event loop, and you have to schedule the call to resolve
to happen on that event loop. Then, without waiting for this goroutine to finish, you need to return the Promise object from your function. Only then will goja be able to understand that your function is async.
from goja.
Thank you @mccolljr I will try it
from goja.
Related Issues (20)
- What Is Types Marshaling Among JS and GOLANG Spaces.
- Support for setting a Promise as handled to true HOT 3
- how to impove performance for a amount of constant literal in a javascript file HOT 4
- vm reuse problem HOT 2
- Request for Assistance: Obtaining Abstract Syntax Tree (AST) with Goja HOT 1
- How to limit the number of for loops HOT 1
- Fibers/Coroutines HOT 4
- Builtin Date locale's methods ignore locale argument HOT 1
- Export JS array to Go slice HOT 2
- if i want to let users do js on my server like cloudflare workers, is it possible to use your repo to do so? HOT 1
- abnormal string input to js function HOT 1
- Go binding for function rest params does not work as expected HOT 2
- how to register custom object into goja like before? HOT 3
- Listing class properties HOT 5
- Circular References Memory Leak HOT 1
- BUG: String.split on an empty string may produces unexpected results HOT 1
- Runtime clears its own interrupt HOT 1
- Object.keys with map[int]any will return <int Value> HOT 2
- RegExp dont support dotAll flag
- how to get script real line number? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from goja.