GVKun编程网logo

最外部的.catch()是否可用于所有链式/嵌套的promiss?

16

这篇文章主要围绕最外部的.catch和是否可用于所有链式/嵌套的promiss?展开,旨在为您提供一份详细的参考资料。我们将全面介绍最外部的.catch的优缺点,解答是否可用于所有链式/嵌套的prom

这篇文章主要围绕最外部的.catch是否可用于所有链式/嵌套的promiss?展开,旨在为您提供一份详细的参考资料。我们将全面介绍最外部的.catch的优缺点,解答是否可用于所有链式/嵌套的promiss?的相关问题,同时也会为您带来catch(...)vs catch(std :: exception&e),有什么区别?、ES6学习---Promise对象catch方法、Grand Central Dispatch(`libdispatch`)是否可以在Windows上使用?、javascript – Promise.then(a,b)和Promise.then(a).catch(b)一样吗?的实用方法。

本文目录一览:

最外部的.catch()是否可用于所有链式/嵌套的promiss?

最外部的.catch()是否可用于所有链式/嵌套的promiss?

我的登录过程有些长,目前依赖3个api调用:

export const authenticationSignIn = (email, password) =>  (dispatch) => {    dispatch({ type: AUTHENTICATION_REQUEST });    apiAccountStatus(email, password)    .then(({ data }) => {      const status = data.status;      if (status === ''ACCOUNT_CREATED'') {        apiSignIn(email, password)        .then(({ data: sessionData }) => {          apiIndexAccounts()          .then(({ data: accountsData }) => {            dispatch({ type: AUTHENTICATION_SUCCESS });            window.router.transitionTo(''/dashboard/home'');          });        });      } else if (status === ''SOMETHING ELSE'') {        // TODO: HANDLE SOMETHING ELSE      }    })    .catch(({ response }) => {      dispatch({ type: AUTHENTICATION_FAILURE });      dispatch(notificationShow(''ERROR'', response.data.type));    });  };

如您所见,此函数非常详细,但是每个嵌套api调用均依赖于先前返回的数据,我正在尝试尽可能多地清除此数据(调度位是redux特有的,但是这些本质上触发了传入的任何内容)。最后,您会看到一个catch声明,我的问题是,该catch声明是否适用于所有允诺apiAccountStatus

答案1

小编典典

最后,您会看到一个catch语句,我的问题是,该catch语句是否能满足所有诺言?

不,它仅适用于外部承诺,即then调用返回的承诺。需要将其拒绝catch才能激活回调。要拒绝此承诺,apiAccountStatus(…)必须拒绝或then回调必须抛出异常或
返回将被拒绝的承诺

最后一件事就是您所缺少的-您在then回调中创建了更多的Promise ,但是您没有使用return它们,因此它们不会链接。你所要做的

export function authenticationSignIn(email, password) {  return (dispatch) => {    dispatch({ type: AUTHENTICATION_REQUEST });    apiAccountStatus(email, password)    .then(({data: {status}}) => {      if (status === ''ACCOUNT_CREATED'') {        return apiSignIn(email, password)//      ^^^^^^        .then(({ data: sessionData }) => {          return apiIndexAccounts()//        ^^^^^^          .then(({ data: accountsData }) => {            dispatch({ type: AUTHENTICATION_SUCCESS });            window.router.transitionTo(''/dashboard/home'');          });        });      } else if (status === ''SOMETHING ELSE'') {        // TODO: HANDLE SOMETHING ELSE      }    })    .catch(({ response }) => {      dispatch({ type: AUTHENTICATION_FAILURE });      dispatch(notificationShow(''ERROR'', response.data.type));    });  };}

catch(...)vs catch(std :: exception&e),有什么区别?

catch(...)vs catch(std :: exception&e),有什么区别?

如何解决catch(...)vs catch(std :: exception&e),有什么区别??

在C ++中,我读到catch(...)捕获了所有可能的异常,但是catch(std::exception &e)也不是吗?

两者之间有什么区别?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

ES6学习---Promise对象catch方法

ES6学习---Promise对象catch方法

        const p = new Promise((resolve, reject)=>{
            setTimeout(()=>{
                //设置 p 对象的状态为失败, 并设置失败的值
                reject("出错啦!");
            }, 1000)
        });

        // p.then(function(value){}, function(reason){
        //     console.error(reason);
        // });

        // catch与then不写第一个回调是一样的,相当于catch是reject的回调
        p.catch(function(reason){
            console.warn(reason);
        });

 

Grand Central Dispatch(`libdispatch`)是否可以在Windows上使用?

Grand Central Dispatch(`libdispatch`)是否可以在Windows上使用?

我正在研究multithreading,GCD似乎比使用pthread.h和pthreads-win32手动编写解决scheme更好。 不过,尽pipe看起来libdispatch正在开发或即将开始工作,但是大多数新的POSIX兼容系统…我必须问,Windows怎么样? libdispatch移植到Windows有什么机会? 防止这种情况发生的障碍是什么?

如果说到这一点, 我需要做些什么来预制这个portage?

编辑:@H_301_6@我已经知道的一些事情,开始讨论:

我们需要一个可在Windows上编译的块兼容编译器,不是吗? PLBlocks会处理吗?

我们可以使用LLVM 块的运行时间吗?

我们libdispatch用APR调用replace用户空间libdispatch所有pthread.h依赖项,以实现可移植性吗? 或者,或者,使用pthreads-win32我想…

编辑1:@H_301_6@我听说,这是完全不可能的,永远不会,因为libdispatch (不知何故)取决于kqueue ,它不能在Windows上提供…有没有人知道这是真的吗?

看看: http ://opensource.mlba-team.de/xdispatch/这个项目(和其他第三方库)将libdispatch带入除macosx以外的平台(Windows,Linux)

https://github.com/DrPizza/libdispatch

从我对它的基本理解来看,libdispatch的Windows相当于非托管代码的并发运行时 ,以及统称为托管代码的并行扩展 的技术集合。 在我看来,GCD很好地映射到这两者,因为它们都以相似的方式抽象工作单元(或“任务”)。

从一些研究来看,似乎港口已经有一些公平的利益,但是这个港口将是一个非常艰巨的任务,可能最终基本上只是API的另一个实现,而不是实际上与原始码共享重要的代码libdispatch。 我看到了一些建议,将libdispatch移植到基于Apache Portable Runtime而不是POSIX上,这使得它更容易跨平台到Windows,但即使这样也不是一个容易的改变。

可能,这绝不是一件小事。

我认为,而不是libdispatch-on-pthreads和pthreads-on-Win32,或libdispatch-on-APR和APR-on-Win32,可能会更好直接在Win32 线程池API上实现libdispatch。 好消息是,这两个API是相似的,你可以自己做端口。 坏消息是可能会有很多的角落案例,这些案例中存在小的语义错配,难以实现准确的行为。

javascript – Promise.then(a,b)和Promise.then(a).catch(b)一样吗?

javascript – Promise.then(a,b)和Promise.then(a).catch(b)一样吗?

参见英文答案 > When is .then(success,fail) considered an antipattern for promises?5个
有什么区别

>

07001.then(a,b)

>

07001.then(a).catch(b)

无论myPromise的内容和状态以及函数a和b的实现如何,两个JavaScript表达式总是会产生相同的结果吗?

除了代码可读性之外,我是否应该更喜欢使用一个而不是另一个?

解决方法

它们处理then()回调中的错误的方式不同,在某些情况下,这可能是一个非常显着的差异,大多数人建议只使用catch().

例如,使用catch(),您可以捕获此错误:

Promise.resolve('test')
.then(r => {
  throw("whoops")
})
.catch(e => console.log("caught error:",e))

使用then(a,b)样式你不能:

Promise.resolve('test')
.then(r => { throw("whoops")},e => console.log("caught error?",e))
// unhandled rejection (you'll need to look in the console)

除了一些测试场景之外,很难想到这种行为首选的用例.

您可以使用两者,这将在then()回调中捕获拒绝和错误,但这会使您比您可能需要的更令人困惑,除非您有一个特殊用例来区分这两种错误.例如哪个处理程序处理哪些错误:

Promise.reject("rejected")
.then(r => {throw("whoops")},e => console.log("Promise 1: caught error in second function:",e))
.catch(e=> console.log("Promise 1: caught error in catch",e))

Promise.resolve("rejected")
.then(r => {throw("whoops")},e => console.log("Promise 2: caught error in second function:",e))
.catch(e=> console.log("Promise 2: caught error in catch",e))

我们今天的关于最外部的.catch是否可用于所有链式/嵌套的promiss?的分享已经告一段落,感谢您的关注,如果您想了解更多关于catch(...)vs catch(std :: exception&e),有什么区别?、ES6学习---Promise对象catch方法、Grand Central Dispatch(`libdispatch`)是否可以在Windows上使用?、javascript – Promise.then(a,b)和Promise.then(a).catch(b)一样吗?的相关信息,请在本站查询。

本文标签: