我正在使用Visual Studio Code编写react + typescript应用程序:
react.js:16.2.0 打字稿:2.6.2
我正在使用vscode的内置Promise库。但不知何故,我无法将被拒绝的承诺传播给调用者函数。在这里,我想尽可能简化我的代码(这是一个已经很复杂的应用程序)。
假设我有一个内部函数Foo,它返回一个promise:
const Foo = (args) => {
return new Promise( (resolve, reject) => {
// 1. call a remote backend method (e.g ajax)
// 2. on call success:
resolve(success);
// 3. on call fails:
reject(error); // --> this error does not propagate
});
}
现在这里是调用Foo的外部函数Bar:
const Bar = (args) => {
new Promise( (resolve, reject) => {
Foo(args).then( success => {
//...success code
}).catch(error => {
// ! this handle is never called
});
})
}
在外部函数栏上,永远不会调用catch处理程序!这就像内心的承诺拒绝无声地失败。我发誓,这一直工作到昨天......我已经花了一半的时间试图弄清楚是不是正在进行。
我不知道该怎么办。所以我转向Stackoverflow和社区。在使用带有Typescript的Promise时,我有什么遗漏吗? (在我使用Q.js库之前。但我切换到Vscode附带的嵌入式promise库)。任何帮助都会对我有所帮助。
答案 0 :(得分:1)
在外部函数栏上,永远不会调用catch处理程序!这就像内心的承诺拒绝无声地失败。我发誓,这一直工作到昨天......我已经花了一半的时间试图弄清楚是不是正在进行。
如果在调用 reject
之后调用{em> ,那么承诺不会拒绝,因为它已在履行时结算。因此不会调用resolve
个处理程序。
答案 1 :(得分:0)
可以将可选的第二个函数传递给.then()
来处理拒绝。
const Bar = (args) => {
new Promise( (resolve, reject) => {
Foo(args).then( success => {
//...success code
}, error => {
//...handle error
})
})
}