我正在尝试根据某些条件调用一个使用rule A:
output: "{X}.{Y}.indiv.vcf"
input: "{X}.common.vcf"
run: "for infile in {input}: os.system('mv '+infile+'.tmp'+' '+infile)"
rule B:
output: "{X}.common.vcf"
input: lambda wildcards: \
expand("{X}.{Y}.vcf", **wildcards, Y=getYfromDB(wildcards["X"]))
params: OUT=lambda wildcards: \
expand("{X}.{Y}.indiv.vcf.tmp", Y=getYfromDB(wildcards["X"]))
shell: """
getCommonAndIndividualVariants --inputs {input} \
--common {output} --indiv {params.OUT}
"""
返回已解决的承诺的函数。
该功能的过度简化版本如下:
Promise.resolve
现在TypeScript不允许它通过编译器并且抛出以下错误:
function fullFilledPromiseReturner(num: number) {
if (num > 5) {
return Promise.resolve(5);
} else {
return Promise.resolve();
}
}
fullFilledPromiseReturner(4).then(data => {
console.log(data);
});
我做错了什么?
答案 0 :(得分:3)
问题是你的函数返回Promise<void> | Promise<number>
,因为你在不同的分支上返回不同的promise类型。所以then
也将是一个联合类型,你将无法调用它,因为没有一个签名是常见的。
最简单的解决方案是显式键入函数以返回联合类型的Promise
而不是Promisses
的联合:
function fullFilledPromiseReturner(num: number): Promise<number | void> {
if (num > 5) {
return Promise.resolve(5);
} else {
return Promise.resolve();
}
}
fullFilledPromiseReturner(4).then(data => {
console.log(data);
});