[英]Typescript: Specifying proper return type for resolve parameters in promises
昨天,我决定使用Typescript,并尝试将一些基本的JavaScript Promise示例移植到Typescript Promise。 但是,在移植样本的过程中,我遇到了一个仍然无法解决的问题。 试图谷歌也没有用。
场景:我确实有一个返回Promise
的函数,该Promise
在执行时解析为number
。 我还想在此样本上测试一些then
场景。
请在下面找到代码示例:
function test_promise(): Promise<number>{
return new Promise((resolve, reject) :number => {
let result:number = 10;
resolve(result);
}).then(result => { // first then
console.log("Result: " + (typeof result)); // Result: number
return result * 2; //
}).then(result => { // second then
return result * 2;
}).then(result => { // third then
return result * 2;
});
}
我还添加了两个屏幕截图,以提高清晰度。
屏幕截图1:
屏幕截图2
我目前尚不清楚几件事:
typeof
结果是number
,而是在console.log
打印它时说它是number
。 有什么不同? number
,那么为什么它不允许我对此执行乘法运算。 为了使此示例正常工作,我需要在此处进行哪些更改?
希望你们能对此有所了解。 谢谢。
问候,
解决方案是通过在new Promise
之后直接添加<number>
来显式指定实例化的第一个Promise
对象的值类型,如下所示:
/* Add <number> after new Promise */
return new Promise<number>((resolve, reject) => {
let result:number = 10;
resolve(result);
}).then(result => { // first then
console.log("Result: " + (typeof result)); // Result: number
return result * 2; //
}).then(result => { // second then
return result * 2;
}).then(result => { // third then
return result * 2;
});
这样做会通知Typescript第一个Promise值类型,从而可以推断出链中后续Promise的值类型。
这将反过来解决您的问题。 有关Typescript中泛型的更多信息,请参见此处 。 希望有帮助!
检查以下行:
return new Promise((resolve, reject) :number => {
: number
表示函数(或意义不大的构造函数)正在返回数字。 这不是真的! new Promise
显然会返回Promise,而您不必指定它。
您想说的也许是Promise处理的类型。 您可以使用角括号来做到这一点:
return new Promise<number>((resolve, reject) => {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.