Comments (13)
参考了您的cmake适配了一下mac,但遇到了Promise无法调用then的问题,想请问您遇到的不能eval具体是个什么情况呢,安卓方面是如何解决的
项目是这个https://github.com/ekibun/flutter_qjs/tree/ffi
from quickjs_dart.
换我的源码quickjs目录,官方缺finalizer
另外promise完了之后要手动调用executePendingjob
请看主目录下main.dart
from quickjs_dart.
请问具体是哪个finalizer,win上面是正常的,mac上不行,JS_ExecutePendingJob是有调用的
from quickjs_dart.
我会看看你的tree,然后看下问题
from quickjs_dart.
请问具体是哪个finalizer,win上面是正常的,mac上不行,JS_ExecutePendingJob是有调用的
有关不能eval:
我使用官方09-06更新的版本无论如何都不能正常eval.
https://github.com/abner/flutter_js/tree/master/android/src/main/c/quickjs
这个库里面的quickjs版本,用它的可以正常eval,后来我对比了diff之后,发现新版缺少了c_function_finalizer
目前没有调查具体这个flutter_js的库使用的是哪个版本的源码
为了顺利开发,我就把它的源码搬过来,没有具体的研究原理。
有关macOS
目前我还没有打算编译过macOS的版本,不清楚跟iOS的差异具体有多大,promise不能调用then,从quickjs的行为上看,应该是JS_ExecutePendingJob没有执行或者执行有问题,或者你可以打个log看看。
另外,因为是异步调用,这里quickjs并没有把队列的api拿出来,也许需要单独做一个promise队列。
从你的tree上看,跟我使用的addCallback的方式不太一样(场景可能不同),我做的是添加一个promise的deffer对象到global,然后再resolve,你可以参考试试看
from quickjs_dart.
感谢,我试出来了,Release有问题,改成Debug就好了,应该是什么优化导致的。
另外qjs原版是 https://github.com/bellard/quickjs,在macos上我能eval,ios我还没试。
from quickjs_dart.
感谢,我试出来了,Release有问题,改成Debug就好了,应该是什么优化导致的。
另外qjs原版是 https://github.com/bellard/quickjs,在macos上我能eval,ios我还没试。
试好了请引用一下你的issue在这里 我去看看
from quickjs_dart.
ios我试了没有发现问题,issue懒得开了,commit到ffi分支了。
eval的是和我自己的需求比较相关,我给所有返回值包了一个Promise.resolve
,方便在dart统一处理js里的异步方法(qjs没有提供直接的方法判断是否是promise),我没找到您代码中对应的方法,至于生成Promise可以直接用JS_NewPromiseCapability
还有最后两个问题,make.sh能不能写在podspec里,以及怎么判断是否是simulator(和实机有不同的abi?),我完全不会用mac,虚拟机好卡。。。(注释里标了IOSTODO的是需要在实机和simulator中改的地方)
from quickjs_dart.
ios我试了没有发现问题,issue懒得开了,commit到ffi分支了。
eval的是和我自己的需求比较相关,我给所有返回值包了一个
Promise.resolve
,方便在dart统一处理js里的异步方法(qjs没有提供直接的方法判断是否是promise),我没找到您代码中对应的方法,至于生成Promise可以直接用JS_NewPromiseCapability
我在JSEngine里面做的实现,不过是直接eval的promise deffer,后面会改成ffi的api,这里就不展开了
还有最后两个问题,make.sh能不能写在podspec里,以及怎么判断是否是simulator(和实机有不同的abi?),我完全不会用mac,虚拟机好卡。。。(注释里标了IOSTODO的是需要在实机和simulator中改的地方)
make.sh用在podpec我没有试过,你可以尝试,判断是否simulator好像是没有的,确实有不同的abi,但无法在工程代码中判断,智能在编译之前提供。由于ios14的simulator采用的是arm64架构,与之前i386不同,这里跟实机有了冲突,google了一圈有一些方案,但暂时还没有想好编译脚本怎么简要的去实现,回头再看吧。
from quickjs_dart.
我遇到了和你相似的问题,Android实机上eval会随机失效,排查原因出在js_get_stack_pointer函数上,猜测是由于dart ffi所处的函数栈不确定导致返回的值与初始化时的stack_top相差超过了设置的stack_size,使得eval返回错误。
我做了一个比较trick的修改,在eval之前把stack_top重置,参见:
ekibun/flutter_qjs@ee93418
你可以试试在源码注释掉CONFIG_STACK_CHECK看看是否是相似的问题。
from quickjs_dart.
我遇到了和你相似的问题,Android实机上eval会随机失效,排查原因出在js_get_stack_pointer函数上,猜测是由于dart ffi所处的函数栈不确定导致返回的值与初始化时的stack_top相差超过了设置的stack_size,使得eval返回错误。
我做了一个比较trick的修改,在eval之前把stack_top重置,参见:
ekibun/flutter_qjs@ee93418你可以试试在源码注释掉CONFIG_STACK_CHECK看看是否是相似的问题。
感谢你发现的问题,目前我还没有出现随机失败问题,请让我多测试一下你的方案。
from quickjs_dart.
Seems that the eval function does not work after JSEngine is initialized. Still don't know why, but we can work around by providing global eval function when engine starts, not after. That one time only solution.
我觉得你一开始的问题就是这个原因造成的
我看了一下diff,abner的做法是去掉 CONFIG_STACK_CHECK,所以不会有stack overflow,但是同时会造成js代码存在死循环的递归时候会闪退。可以试试
var a=()=>a();
a();
from quickjs_dart.
Seems that the eval function does not work after JSEngine is initialized. Still don't know why, but we can work around by providing global eval function when engine starts, not after. That one time only solution.
我觉得你一开始的问题就是这个原因造成的
我看了一下diff,abner的做法是去掉 CONFIG_STACK_CHECK,所以不会有stack overflow,但是同时会造成js代码存在死循环的递归时候会闪退。可以试试
var a=()=>a(); a();
验证了一下,确实有这个问题,我回头更新你的修改
from quickjs_dart.
Related Issues (1)
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 quickjs_dart.