Reactjs 未调用VS代码承诺捕获处理程序
我正在使用Visual Studio代码编写react+typescript应用程序: react.js:16.2.0 打字稿:2.6.2 我正在使用vscode的内置Promise库。但不知何故,我无法将被拒绝的承诺传播给调用方函数。在这里,我想尽量简化我的代码(它已经是一个复杂的应用程序) 假设我有一个内部函数Foo,它返回一个承诺:Reactjs 未调用VS代码承诺捕获处理程序,reactjs,typescript,promise,Reactjs,Typescript,Promise,我正在使用Visual Studio代码编写react+typescript应用程序: react.js:16.2.0 打字稿:2.6.2 我正在使用vscode的内置Promise库。但不知何故,我无法将被拒绝的承诺传播给调用方函数。在这里,我想尽量简化我的代码(它已经是一个复杂的应用程序) 假设我有一个内部函数Foo,它返回一个承诺: const Foo = (args) => { return new Promise( (resolve, reject) => {
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的外部功能栏:
const Bar = (args) => {
new Promise( (resolve, reject) => {
Foo(args).then( success => {
//...success code
}).catch(error => {
// ! this handle is never called
});
})
}
在外部功能栏上,永远不会调用catch处理程序!!这就像内心的承诺被默默拒绝。我发誓这一直有效到昨天…我花了半个星期的时间试图弄清楚到底是怎么回事
我不知道该怎么办了。因此,我转向Stackoverflow和社区。在使用Promise和Typescript时,我有什么遗漏吗?(在我使用Q.js库之前,我切换到了Vscode附带的嵌入式promise库)。任何帮助都会真正帮助我
在外部功能栏上,永远不会调用catch处理程序!!这就像内心的承诺被默默拒绝。我发誓这一直有效到昨天…我花了半个星期的时间试图弄清楚到底是怎么回事
如果在调用了
resolve
之后调用了拒绝
,则承诺不会拒绝,因为它已得到满足。因此,将不会调用catch
处理程序 可以将可选的第二个函数传递给。然后()
,以处理拒绝
const Bar = (args) => {
new Promise( (resolve, reject) => {
Foo(args).then( success => {
//...success code
}, error => {
//...handle error
})
})
}
我认为他的评论是指使用了某种“如果”语句,我不认为这是问题所在。谢谢你的回答。但由于远程调用失败,因此未调用解析。因此,如果您试图在
//3上放置console.log()
,则只调用拒绝。调用失败:
阻止查看是否实际调用了拒绝
函数?拒绝函数实际被调用。我在这行上设置了一个断点。我忽略了一件事(正如我所说,我试图总结我的示例代码),那就是Foo的内部函数使用了q.js promise库。我认为这会弄糟VSCODE的内置promise库。您是否尝试更改promise库?不幸的是,我无法更改promise库。内部foo是一个使用q.js的第三方库,我的应用程序使用vscode的内置promise库。直到最近,这种方法才奏效。几天前,我将vscode升级到1.19.3版本。我想知道这次升级是否破坏了我的代码