Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 未调用VS代码承诺捕获处理程序_Reactjs_Typescript_Promise - Fatal编程技术网

Reactjs 未调用VS代码承诺捕获处理程序

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) => {

我正在使用Visual Studio代码编写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的外部功能栏:

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版本。我想知道这次升级是否破坏了我的代码