【发布时间】:2018-02-05 20:44:38
【问题描述】:
我正在用 Visual Studio Code 编写一个 react + typescript 应用程序:
react.js:16.2.0 打字稿:2.6.2
我正在使用 vscode 的内置 Promise 库。但不知何故,我无法将被拒绝的承诺传播给调用者函数。在这里,我想尽可能地简化我的代码(它已经是一个复杂的应用程序)。
假设我有一个返回承诺的内部函数 Foo:
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
});
})
}
在外部函数 Bar 上,从不调用 catch 处理程序!就像内心的承诺拒绝无声无息地失败了。我发誓这一直有效到昨天......我花了我周日的一半时间试图弄清楚这是怎么回事。
我不知道该怎么办了。所以我求助于 Stackoverflow 和社区。关于将 Promise 与 Typescript 一起使用,我有什么遗漏吗? (在我使用 Q.js 库之前。但我切换到了 Vscode 附带的嵌入式承诺库)。任何帮助都会真正帮助我。
【问题讨论】:
-
您是否尝试在
// 3. on call fails:块上放置console.log()以查看是否实际调用了reject函数? -
实际调用了reject函数。我在这条线上设置了一个断点。它实际上停在那里。
-
我省略的一件事(正如我所说,我试图总结我的示例代码)是内部函数 Foo 使用 q.js 承诺库。我认为这与 vscode 内置的 Promise 库有冲突
-
你尝试过更改 promise 库吗?
-
不幸的是,我无法更改承诺库。内部的 foo 是使用 q.js 的第三方库,而我的应用程序使用的是 vscode 内置的 promise 库。这一直工作到最近。前几天,我将vscode升级到1.19.3版本。如果这次升级破坏了我的代码,我会徘徊
标签: reactjs typescript promise