Angular 7 文档提供了rxjs Observables在为AJAX请求实现指数补偿中的实际用法的示例:
import { pipe, range, timer, zip } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { retryWhen, map, mergeMap } from 'rxjs/operators';
function backoff(maxTries, ms) {
return pipe(
retryWhen(attempts => range(1, maxTries)
.pipe(
zip(attempts, (i) => i),
map(i => i * i),
mergeMap(i => timer(i * ms))
)
)
);
}
ajax('/api/endpoint')
.pipe(backoff(3, 250))
.subscribe(data => handleData(data));
function handleData(data) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
虽然我了解了Observables和backoff的概念,但我还不太清楚,如何精确retryWhen计算重新订阅源的时间间隔ajax。
我使用 Intellij IDEA 构建了一个 WAR 存档工件,其中包含一个用 Kotlin 编写的 Spring Boot MVC 应用程序。
以下是相关内容:
$ jar tvf application.war
...
1649 [timestamp] WEB-INF/classes/org/domain/apps/App00HelloMvcKt.class
2087 [timestamp] WEB-INF/classes/org/domain/apps/App00HelloMvc.class
...
Run Code Online (Sandbox Code Playgroud)
App00HelloMvcKt包含fun main(...),并且App00HelloMvc是 Spring Boot 应用程序类。
MANIFEST.MF包含Main-Class条目:
Main-Class: org.domain.apps.App00HelloMvcKt
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,出现了一个问题:
$ java -jar application.war
Error: Could not find or load main class org.domain.apps.App00HelloMvcKt
Caused by: java.lang.ClassNotFoundException: org.domain.apps.App00HelloMvcKt
Run Code Online (Sandbox Code Playgroud)
据我了解,有了这个目录结构,不需要额外的摸索类路径。那为什么不能运行呢?
附加信息:这是一个教学项目。我正在尝试.jsp从带有嵌入式 Tomcat 的 Spring Boot MVC 应用程序提供页面。根据互联网,此设置仅在您将应用程序打包到 WAR 并使用java -jar.
我遇到了 Spock Framework (1.3-groovy-2.5) 的一个不幸的方面,我用它来集成测试 Gradle 插件。
代码示例
家长班级:
class ClassA extends Specification {
def setupSpec() {
System.out.println("In ClassA setupSpec()")
}
def "base feature"() {
expect:
true
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
class ClassB extends ClassA {
@Override
def setupSpec() {
System.out.println("In ClassB setupSpec()")
}
def "extended feature"() {
expect:
true
}
}
Run Code Online (Sandbox Code Playgroud)
当我在 中运行测试时ClassB,两个版本都会setupSpec()被调用:
In ClassA setupSpec()
In ClassB setupSpec()
Run Code Online (Sandbox Code Playgroud)
当然,如果我通过本机 Groovy 方式调用方法:
class Main {
static void main(String[] args) {
ClassB classB = new ClassB()
classB.setupSpec() …Run Code Online (Sandbox Code Playgroud) 可以围绕构造函数创建一个闭包,以保存实例的唯一ID:
const MyObject = (() => {
let id = 0;
return function() {
this.id = id++;
};
})();
Run Code Online (Sandbox Code Playgroud)
使用类语法如何实现相同的目的?有没有一种方法可以围绕类的constructor函数创建一个闭包?
javascript ×2
angular ×1
class ×1
closures ×1
ecmascript-6 ×1
groovy ×1
java ×1
kotlin ×1
observable ×1
rxjs ×1
spock ×1
spring ×1
spring-boot ×1
testing ×1
typescript ×1
war ×1