gpt4 book ai didi

javascript - 允许类似 promise.all 的函数返回可选的 null 结果

转载 作者:行者123 更新时间:2023-11-29 23:28:28 26 4
gpt4 key购买 nike

我有一个与 Promise.all 非常相似的函数,除了它捕获错误并为任何抛出的 promise 返回 null:

export async function genNull<T>(promise: Promise<T>): Promise<?T> {
try {
return await promise;
} catch (err) {
return null;
}
}

export function genAllNull<T: Array<Promise<mixed>>>(...promises: T): Promise<$TupleMap<T, typeof $await>> {
return Promise.all(promises.map(genNull));
}

我现在要解决的问题是我不知道如何正确地注释 genAllNull 函数,以便结果都可以为空。例如如果我写:

const [foo, bar] = await genAllNull(Promise.resolve(42), Promise.resolve(43));

我希望 foobar 都有 ?Number 的流类型,但它们有 Number相反,即流不认为它们可以为空。我不知道如何注释函数签名以便返回类型可为空。

最佳答案

以下错误与null not compatible with number 正确正确地:

export async function genNull<T>(promise: Promise<T>): Promise<T | null> {
try {
return await promise;
} catch (err) {
return null;
}
}

export function genAllNull<Item, T: Array<Promise<Item>>>(
...promises: T
): Promise<$TupleMap<T, <V>(i: Promise<V>) => V | null>> {
return Promise.all(promises.map(genNull));
}

async function fn(){
const [foo, bar] = await genAllNull(Promise.resolve(43), Promise.resolve(43));

var val1: number = foo;
var val2: number = bar;
}

( On Flow Try )

首先,我放弃了使用 ?T赞成T | null?T实际上是T | null | undefined你说你只想要null待补充。

二、改mixed成为一个实际的参数化类型,第三个改变了typeof $await成为<V>(i: Promise<V>) => V | null因为这反射(reflect)了您正在进行的转化。

关于javascript - 允许类似 promise.all 的函数返回可选的 null 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com