【发布时间】:2018-04-09 01:15:51
【问题描述】:
有这种古老/经典的方法 - 其他方法调用的方法返回结果:
method1(): ObjectX {
if( condition1 )
return method2();
return undefined // or some default value;
}
method2(): ObjectX {
let res: ObjectX;
// some IO operations
return res;
}
现在我想使用Promise<ObjectX>作为method2的返回类型(例如因为有一些IO操作)。
所以method2变成:
method2() : Promise<ObjectX> {
return new Promise((resolve)=> {
let res: ObjectX;
// some IO operations
resolve(res);
})
}
问题出在方法1上。
为什么它不能是这样的:
method1() : Promise<ObjectX> {
if( condition1)
return this.method2();
return new Promise((reject)=> { reject(‘error’); })
}
为什么需要返回 promise 的方法不能返回另一个方法的结果(作为类似的 Promise)?
为什么它必须“打开”收到的 Promise,取出结果并用这个结果解决它自己的 Promise?
像这样:
method1() : Promise<ObjectX> {
return new Promise((resolve, reject) => {
if( condition1)
method2().then( (r) => resolve(r) ); // take out the result from received promise and resolve my own promise :(
reject(‘error’);
});
}
我的意思是这行得通,但我想了解为什么以前的方法 1 行不通。
更一般地说,假设我有一个方法序列,它们相互调用并返回一个对象(返回对象遍历序列)。如果我在最后一个方法中引入 Promise - 作为结果类型,我必须大量修改序列中所有方法的代码,而不仅仅是签名和返回语句。
或者是否有其他技术可以实现这一点?
【问题讨论】:
标签: typescript promise