如何在 Kotlin/JS 中导入和使用异步 JS 函数?
How do I import and use an async JS function in Kotlin/JS?
我在将 Javascript 异步函数导入我的 Kotlin 代码时遇到问题。
这是一个示例 Javascript 函数:
export async function signUp(email, password){
console.log("Signing Up");
try {
const userCred = await createUserWithEmailAndPassword(auth, email, password);
console.log(userCred);
return userCred.user.accessToken
}
catch (e) {
console.log(e);
}
}
我将它导入到我的 Kotlin 中:
@JsModule("@jlengrand/firebase-ports")
@JsNonModule
external object FirebasePorts{
suspend fun signUp(email: String, password: String) : String
}
使用该函数时,我希望从中得到一个字符串 :
var user : String? by mutableStateOf(null)
Button( attrs = {
onClick {
GlobalScope.launch {
user = FirebasePorts.signUp(email, password)
}
}
}) {
Text("Login!")
}
// printing the value
TextArea(value = user.toString())
然而,我得到的却是一个 Promise
我做错了什么?
谢谢!
JS 中的异步函数目前未映射到 Kotlin 中的挂起函数。要在 Kotlin 中使用异步函数,您需要处理原生 promise:
import kotlin.js.Promise
@JsModule("@jlengrand/firebase-ports")
@JsNonModule
external object FirebasePorts {
fun signUp(email: String, password: String) : Promise<String>
}
然后使用FirebasePorts.signUp(...).then { ... }
访问值。
我在将 Javascript 异步函数导入我的 Kotlin 代码时遇到问题。
这是一个示例 Javascript 函数:
export async function signUp(email, password){
console.log("Signing Up");
try {
const userCred = await createUserWithEmailAndPassword(auth, email, password);
console.log(userCred);
return userCred.user.accessToken
}
catch (e) {
console.log(e);
}
}
我将它导入到我的 Kotlin 中:
@JsModule("@jlengrand/firebase-ports")
@JsNonModule
external object FirebasePorts{
suspend fun signUp(email: String, password: String) : String
}
使用该函数时,我希望从中得到一个字符串 :
var user : String? by mutableStateOf(null)
Button( attrs = {
onClick {
GlobalScope.launch {
user = FirebasePorts.signUp(email, password)
}
}
}) {
Text("Login!")
}
// printing the value
TextArea(value = user.toString())
然而,我得到的却是一个 Promise
我做错了什么?
谢谢!
JS 中的异步函数目前未映射到 Kotlin 中的挂起函数。要在 Kotlin 中使用异步函数,您需要处理原生 promise:
import kotlin.js.Promise
@JsModule("@jlengrand/firebase-ports")
@JsNonModule
external object FirebasePorts {
fun signUp(email: String, password: String) : Promise<String>
}
然后使用FirebasePorts.signUp(...).then { ... }
访问值。