小编que*_*zak的帖子

当 Promise.all() 拒绝时停止其他承诺

而所有Promise.all关于如何等待所有承诺的问题,但我想走另一条路——当任何承诺失败时,停止其他承诺,甚至停止整个脚本。

这是一个简短的例子来说明:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'resolve1');
}).then(a => { console.log('then1'); return a; });

const promise2 = new Promise((resolve, reject) => {
  setTimeout(reject, 2000, 'reject2');
}).then(a => { console.log('then2'); return a; });

const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, 'resolve3');
}).then(a => { console.log('then3'); return a; });

Promise.all([promise1, promise2, promise3])
  .then(values => { console.log('then', values); })
  .catch(err => { console.log('catch', err); throw err; });

// results:
// …
Run Code Online (Sandbox Code Playgroud)

javascript promise es6-promise

12
推荐指数
1
解决办法
6763
查看次数

Firebase:在Kotlin/Java中使用枚举字段的简洁方法?

我在firebase上的数据使用了许多具有字符串类型的字段,但实际上是枚举值(我在验证规则中检查).要按照指南将数据下载到我的Android应用程序中,该字段必须是基本字段String.我知道我可以使用枚举的第二个(排除的)字段解决这个问题,并根据字符串值设置此字段.一个简短的例子:

class UserData : BaseModel() {
    val email: String? = null
    val id: String = ""
    val created: Long = 0
    // ... more fields omitted for clarity
    @Exclude
    var weightUnitEnum: WeightUnit = WeightUnit.KG
    var weightUnit: String
        get() = weightUnitEnum.toString()
        set(value) { weightUnitEnum = WeightUnit.fromString(value) }
}

enum class WeightUnit(val str: String) {
    KG("kg"), LB("lb");
    override fun toString(): String = str
    companion object {
        @JvmStatic
        fun fromString(s: String): WeightUnit = WeightUnit.valueOf(s.toUpperCase())
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,虽然这有效,但它并不是很干净:

  • enum …

java android kotlin firebase firebase-realtime-database

8
推荐指数
2
解决办法
1536
查看次数

TypeScript方法装饰器-启用noImplicitThis的`this`

我正在尝试编写一个简单的方法装饰器,该装饰器在调用原始方法之前执行一些简单的逻辑。我可以找到的所有示例都归结为最后调用originalMethod.apply(this, args)-但在中noImplicitThis启用时tsconfig.json,出现以下错误:

[eval].ts(1,224): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
Run Code Online (Sandbox Code Playgroud)

我尝试通过致电解决此问题originalMethod.apply(this as any, args),但错误仍然存​​在。

问题:在不禁用整个项目的情况下,是否有任何变通办法来调用原始方法noImplicitThis


最小示例-适用于noImplicitAny残疾人士:

function logBeforeCall1(): originalMethodDecorator {
    return function(
        target: any,
        propertyKey: string | symbol,
        descriptor: PropertyDescriptor,
    ): PropertyDescriptor {
        const originalMethod = descriptor.value;
        descriptor.value = (...args: any[]) => {
            console.log('hello!');
            return originalMethod.apply(this, args);
        };
        return descriptor;
    };
}

class Test1 {
    private num: …
Run Code Online (Sandbox Code Playgroud)

decorator typescript typescript-decorator

5
推荐指数
1
解决办法
585
查看次数

Kotlin:ProGuard会擦除属性属性

TL; DR:启用了proguard时,尽管使用了应保留所有这些属性的proguard配置,但在使用反射时,我的属性看起来是私有的,不可为空且没有注释。

我有一些data class具有公共属性的简单es,可以在我的Android应用中用作数据模型。稍后,当对所述类进行泛型[反]序列化时,我会像这样过滤属性列表:

val properties = instance::class.memberProperties
        .filter { it.visibility == KVisibility.PUBLIC } // && some other conditions, unrelated here
        .filterIsInstance<KMutableProperty<*>>()
Run Code Online (Sandbox Code Playgroud)

它可以在我的调试版本上正常工作(我是说它选择了我想要的属性)。但是,在进行发布构建时,如果激活 proguard,则结果为空。为了检查原因,我记录了有关一个类的属性的所有相关信息-证明了它们的visibility字段读取PRIVATE(所有其他属性与调试版本相同)。

我已经在proguard config中设置了一行来保留所有模型:

-keepclassmembers class * extends com.models.package.name.BaseModel { *; }
Run Code Online (Sandbox Code Playgroud)

我之前尝试过此方法,但结果相同:

-keep class com.models.package.name.** { *; }
Run Code Online (Sandbox Code Playgroud)

保护者为何/如何影响财产可视性?我应该以某种方式修改配置吗?还是我在这里想念其他东西?


更新:似乎并不是唯一的可见性。prop.returnType.isMarkedNullable也不起作用,它返回false声明为可空的属性。即使我要求proguard保留注释,注释也似乎会丢失。有什么办法可以解决此问题?这几乎使我的工作两周没用了...

android proguard kotlin

3
推荐指数
1
解决办法
1286
查看次数