我正在获取一个返回 json 的 API,但是当它出现错误时,它只返回一个文本(在带有 express 的节点中,返回结果为.json({}),错误为.send('string')),但是我无法修改 API
所以我试图制作一些读取 json 的东西,但如果它是一个文本,它将进入.catch错误所在的文本。
这是我尝试过但没有成功的方法。
fetch(apiUrl)
.then(res => {
try {
let json = res.json()
return json
} catch (error) {
return new Promise((resolve, reject) => reject(res.text()))
}
})
.then(res => {
// get result from res.json() **res == res.json**
})
.catch(error => {
// get result from res.text() **res == res.text**
})
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?如何获得res.json()在未来.then(),但如果失败,得到res.text()的.catch?
我想获得.text在.catch …
简而言之,我的问题是我不能在用Kotlin编写的活动中使用GlideApp(生成的API).有趣的是Android Studio看到了引用,我可以打开生成的GlideApp,有代码完成,但是当我尝试构建它时,它失败了"Unresolved reference:GlideApp"
滑动模块在java中实现,因为大多数应用程序都是用java编写的.
任何的想法?
我正在学习协程,我遇到了以下令人惊讶的(对我而言)行为。我想要一张平行地图。我考虑了4个解决方案:
map,没有并行性pmap从这里。coroutineScope并使用GlobalScope.parallelStream.编码:
import kotlinx.coroutines.*
import kotlin.streams.toList
import kotlin.system.measureNanoTime
inline fun printTime(msg: String, f: () -> Unit) =
println("${msg.padEnd(15)} time: ${measureNanoTime(f) / 1e9}")
suspend fun <T, U> List<T>.pmap(f: (T) -> U) = coroutineScope {
map { async { f(it) } }.map { it.await() }
}
suspend fun <T, U> List<T>.pmapGlob(f: (T) -> U) =
map { GlobalScope.async { f(it) } }.map { it.await() …Run Code Online (Sandbox Code Playgroud) parallel-processing performance coroutine kotlin kotlin-coroutines
我有一个由Joomla管理的网站.我想在我的一篇文章中显示图像,但该图像无法在Internet Explorer中查看,但其他浏览器可以显示它,尽管路径正常.我想念什么?
链接:http: //ascorbrasov.ro/images/stories/necula_ctin2.jpg
HTML:
<img src="/images/stories/constantin_necula2.jpg" border="0"
title="Constantin Necula - Conferinta" />
Run Code Online (Sandbox Code Playgroud)
谢谢
我尝试将viewModelScope添加到基本的viewModel中,但是android studio无法识别它。
我尝试使用找到的一些解决方案来更改gradle构建文件,但没有任何效果。
这是我的build.gradle应用程序的摘录
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha01"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha01"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01"
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-alpha01"
Run Code Online (Sandbox Code Playgroud)
当我在viewModel中键入viewModelScope时说Unresolved reference: viewModelScope。
android kotlin android-gradle-plugin kotlin-android-extensions kotlin-coroutines
问题是我无法使这些下划线出现,我不确定是否有任何优雅的解决方案(或不太糟糕)来存档此文件。我已经考虑过设置绝对位置并使其合适,但是我不确定这是否是最佳解决方案。
我知道问题看起来没有那么详细,但是我没有更多信息可提供。
谢谢!
我正在阅读Kotlin没有通配符的原因(https://kotlinlang.org/docs/reference/generics.htm l)。一切都到了申报地点的差异。我们有<in T>和<out T>结构应该替换通配符。我想我了解<out T>工作原理,但是遇到了麻烦<in T>。
因此,在Java中,我们可以这样写:
public List<? extends Number> list1;
public List<? super String> list2;
Run Code Online (Sandbox Code Playgroud)
初始化后的第一种情况成为只读列表(尽管不是完全不变的,因为我们可以清除它),如果我们将每个元素都视为Number,则可以读取。
第二种情况是只写的(尽管如果我们将每个元素都视为对象,则可以读取)。我们可以在那里写String及其子类。
在Kotlin中,我可以使用以下方式重新创建list1示例<out T>:
class Service {
val container = Container(mutableListOf("1", "2", "3"))
}
class Container<T>(var list1: MutableList<out T>)
Run Code Online (Sandbox Code Playgroud)
最后,我尝试了一些类似的尝试,<in T>以为我可以重新创建list2示例,但是失败了:

有人可以向我解释如何在Kotlin中实现我的list2示例吗?我应该如何<in T>以正确的方式使用构造?
我是 Kotlin 和协程的新手,我正在尝试了解协程 API,所以我很可能做错了什么。所以我有某种对象的列表,我试图对这些对象中的每一个应用一些长时间运行的处理。
val listOfFoos = listOf(Foo(1), ..., Foo(n))
listOfFoos.forEach { longRunningJob(it) }
fun longRunningJob(foo: Foo) {
runBlocking{
delay(2000) //hardcoded delay for testing
}
//do something else
}
Run Code Online (Sandbox Code Playgroud)
当然,这是并发运行它的完美候选者,所以这里使用的是好的旧线程:
listOfFoos.map { thread(start = true) { longRunningJob(it) } }.forEach { it.join() }
Run Code Online (Sandbox Code Playgroud)
当我测量它的执行时间时,它measureTimeMillis给了我大约 2 秒的时间,这看起来非常好,因为每个都longRunningJob并行运行。但是协程要好得多,因为它没有用于上下文切换的线程那样的开销。所以这是我使用协程的实现:
val deferredResults =
listOfFoos.map { GlobalScope.async { longRunningJob(it) } }
runBlocking {
deferredResults.awaitAll()
}
Run Code Online (Sandbox Code Playgroud)
但是这个实现在大约 4 秒内完成了执行,这根本不是我所期望的,如果我向列表中添加更多元素,执行时间也会增加。
那么我在这里做错了什么?
我的目标是在每次点击时将div旋转180度,而不会切换CSS类。
第一次单击可以实现一个旋转(.style.transform =“ rotate(180deg)”;),但是任何后续单击都无效。
顺便说一句,那到底是为什么?div的ID并未更改,因此从理论上讲,相同的触发器(在这种情况下为单击)应该调用相同的函数,对吗?但事实并非如此。我不知道这里的逻辑是什么,技术上的解释是什么,并且在实践中,如何再次操作该后div(即在其JavaScript操作之后的原始div),而又无需切换CSS类。
function rotate() {
document.getElementById("container").style.transform =
"rotate(180deg)";
}Run Code Online (Sandbox Code Playgroud)
.container {
width: 200px;
height: 400px;
border: 5px solid;
border-bottom-color: blue;
border-top-color: red;
}Run Code Online (Sandbox Code Playgroud)
<div class="container" id="container" onclick="rotate()"></div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试异步加载图像,并且仅在加载图像后才将其显示在 React 应用程序中。
componentDidMount() {
const img = new Image();
img.onload = () => {
this.setState({
originalImage: img,
});
}
img.src = './images/testImage.jpg'
}
render() {
return (
<main>
{
this.state.originalImage
}
</main>
);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
对象作为 React 子对象无效(找到:[object HTMLImageElement])
我想知道为什么会发生这个错误。当然,如果我只添加一个<img>标签,它就可以正常工作。
kotlin ×5
javascript ×4
android ×2
coroutine ×2
css ×2
html ×2
image ×2
concurrency ×1
es6-promise ×1
fetch ×1
generics ×1
java ×1
performance ×1
reactjs ×1