在J2V8中使用promise
Working with promises in J2V8
我试图通过J2V8在Java项目中使用内联css NPM包,将样式表内联到样式属性中。
final NodeJS nodeJS = NodeJS.createNodeJS();
final V8Object inlineCss = nodeJS.require(new File(
"path/to/node_modules/inline-css/index.js"
));
final V8 jsRuntime = nodeJS.getRuntime();
final Map<String, Object> inlineOptions = new HashMap<>();
inlineOptions.put("applyLinkTags", false);
inlineOptions.put("removeStyleTags", false);
inlineOptions.put("url", "http://example.com");
jsRuntime.add("inlineCss", inlineCss);
jsRuntime.add("inlineOptions", V8ObjectUtils.toV8Object(jsRuntime, inlineOptions));
try (FileInputStream inputStream = new FileInputStream(pageFile)) {
byte[] data = new byte[(int) pageFile.length()];
inputStream.read(data);
String pageContent = new String(data, "UTF-8");
JavaVoidCallback successCallback = new JavaVoidCallback() {
@Override
public void invoke(V8Object v8Object, V8Array v8Array) {
//...
}
};
JavaVoidCallback errorCallback = new JavaVoidCallback() {
@Override
public void invoke(V8Object v8Object, V8Array v8Array) {
//...
}
};
jsRuntime.add("pageContent", pageContent);
jsRuntime.registerJavaMethod(successCallback, "onSuccess");
jsRuntime.registerJavaMethod(errorCallback, "onError");
jsRuntime.executeObjectScript("inlineCss(pageContent, inlineOptions).then(onSuccess).catch(onError)");
} catch (IOException | V8ScriptExecutionException | V8ScriptCompilationException e) {
//...
}
但是成功和错误回调都不会被调用,也不会抛出任何错误。我找不到任何适合J2V8的文档,这里提供的示例也没有什么帮助。有人使用J2V8来处理JavaScript承诺吗?或者有人看到错误了?
此外,如果你知道一个好的Java库来内联CSS,那也会很有帮助。到目前为止,当您在元素上有多个类和一个id时,我遇到的那些并不能真正可靠地工作。CSSBox看起来是一个很有前途的解决方案,但它似乎无法正确处理以供应商为前缀的规则。
另一种选择是使用CLI脚本,但这是我的最后手段,因为这意味着我还需要在Java应用程序旁边部署NodeJS。
您必须泵送Node.js消息循环:
while(nodeJS.isRunning()) {
nodeJS.handleMessage();
}
把这个添加到代码的底部,它应该可以工作了。此外,我注意到您有onSuccess(c)
,我认为c应该是pageContent。
相关文章:
- 使用promise和mongoose对文档进行排序
- 测试Angular Service解决错误回调中的promise
- 节点协同与生成器和Promise并行流量控制
- 根据是否解析了 Promise 从函数返回值
- 将一个方法转换为promise:Nodejs
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- js promise没有正确关闭
- Angularjs使用“;这个“;promise内的关键字回调
- AngularJS和promise值在调用本地函数时的效果-未定义
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 以同步方式获取Javascript Promise的值
- NodeJS和pg promise,捕获PostgreSQL异常
- AngularJS使用http进行promise处理
- Angular promise return"未定义的“;值.NET MVC
- Promise函数在.then之后未运行函数化
- 如何为javascript promise进行阻塞并返回解析结果
- 将其中一个异步方法重写为使用promise的方法
- 通过AngularJS promise下载一个文件
- 如何在AngularJS视图中使用promise(ng-show)
- 在J2V8中使用promise