这是一个直截了当的问题,但我找不到答案。有没有办法在Kotlin中初始化email: {
type : DataTypes.STRING,
validate : {
isEmail: {
msg: "wrong format email"
},
notEmpty: {
msg: 'Email not null'
},
isUnique: function(value, next){
'table'.find({
where : {
email:value,
id:{[Op.ne]: this.id}
}
}).then(function(result){
if(result === null){
return next()
}else{
return next(' Email already use')
}
}).catch(err =>{
return next()
})
}
}
}
时收到通知?
我知道我可以检查它是否已使用lateinit var
初始化,但这不一样。
谢谢
答案 0 :(得分:3)
lateinit var
仅适用于最简单的情况,即未初始化的值在应用程序的上下文中没有意义,例如onCreate()
中的依赖注入或后期初始化。
您需要的是具有特定行为的属性委托。看看http://selenium-python.readthedocs.io/api.html:
var coolvar by Delegates.observable("initial value") { _, old, new ->
println("coolvar has been updated")
}
答案 1 :(得分:-1)
如果您使用Kotlin协程,则可以使用delay()函数处理它。 对于复杂的场景。如果值更改,则不像直接函数那样调用此函数。
示例:
private var lateinit extractFilesThread: Deferred<Unit>
private fun init() {
GlobalScope.async {loadData()}
GlobalScope.async {doSomeWork()}
}
private suspend fun loadData() {
extractFilesThread = GlobalScope.async {
initialFilesManager.extractDataIfNeeded()
}
}
private suspend fun doSomeWork() {
GlobalScope.async {
waitExtractFilesThread()
startThisWork()
}
}
private suspend fun waitExtractFilesThread() {
while (!::extractFilesThread.isInitialized) {
delay(HALF_SECOND_IN_MILI)
}
extractFilesThread.await()
}
所以在这里您要在extractFilesThread完成后调用startThisWork() 并且只有在await()已经初始化的情况下,您才能使用它,因此我们使用delay()函数,这是一个暂停函数,因此它不会阻止其他函数的执行。