这篇文章主要围绕最外部的.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(...)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?
我的登录过程有些长,目前依赖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),有什么区别??
在C ++中,我读到catch(...)
捕获了所有可能的异常,但是catch(std::exception &e)
也不是吗?
两者之间有什么区别?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
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上使用?
我正在研究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)一样吗?
有什么区别
>
07001.then(a,b)
>
07001.then(a).catch(b)
?
无论myPromise的内容和状态以及函数a和b的实现如何,两个JavaScript表达式总是会产生相同的结果吗?
除了代码可读性之外,我是否应该更喜欢使用一个而不是另一个?
解决方法
例如,使用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)一样吗?的相关信息,请在本站查询。
本文标签: