如何拒绝同步和异步代码函数中的承诺?
How to reject a promise in a function of both sync and async code?
在我的 class 中,我得到了一个包含同步和异步代码的函数,例如:
export class SomeClass(){
constructor(){
}
foo(a: SomeDataClass): Promise<void>{
if(!a){
throw new Error('a is undefined');
}
return doSomething(a.value).then(()=>{
console.log('done');
}).catch((error)=>{
throw error;
});
}
}
export class SomeDataClass(){
public value: number;
public name: string;
constructor(){
}
}
在 catch
部分抛出以下错误会为 foo
函数的用户引发 catch
。但是第一次抛出(在 if
部分)不会,为了抓住这个我将不得不在 try/catch.
中使用 foo
如果我不在 then
部分内抛出返回的承诺,我怎么会引发错误? (不使用 bluebird
并拒绝 Resolver
)
如有遗漏,请告诉我。
在此先感谢您的帮助。
所以我发现 Promise
上有一个 reject
函数,它实际上做的正是我正在寻找的,它引发了一个错误,它作为 Promise
错误而不是像常规 throw
那样在 try/catch
.
中捕获
返回它与在 Promise.then
链中抛出错误相同
foo(a: SomeDataClass): Promise<void>{
if(!a){
return Promise.reject('a is undefined'); //<----- Promise.reject
}
return doSomething(a.value).then(()=>{
console.log('done');
}).catch((error)=>{
throw error;
});
}
在我的 class 中,我得到了一个包含同步和异步代码的函数,例如:
export class SomeClass(){
constructor(){
}
foo(a: SomeDataClass): Promise<void>{
if(!a){
throw new Error('a is undefined');
}
return doSomething(a.value).then(()=>{
console.log('done');
}).catch((error)=>{
throw error;
});
}
}
export class SomeDataClass(){
public value: number;
public name: string;
constructor(){
}
}
在 catch
部分抛出以下错误会为 foo
函数的用户引发 catch
。但是第一次抛出(在 if
部分)不会,为了抓住这个我将不得不在 try/catch.
foo
如果我不在 then
部分内抛出返回的承诺,我怎么会引发错误? (不使用 bluebird
并拒绝 Resolver
)
如有遗漏,请告诉我。
在此先感谢您的帮助。
所以我发现 Promise
上有一个 reject
函数,它实际上做的正是我正在寻找的,它引发了一个错误,它作为 Promise
错误而不是像常规 throw
那样在 try/catch
.
返回它与在 Promise.then
链中抛出错误相同
foo(a: SomeDataClass): Promise<void>{
if(!a){
return Promise.reject('a is undefined'); //<----- Promise.reject
}
return doSomething(a.value).then(()=>{
console.log('done');
}).catch((error)=>{
throw error;
});
}