为什么我不能将Javascript Promise存储在变量中,以后再调用"then"和"catch"方法?

Nat*_*hat 2 javascript asynchronous promise ecmascript-6

我已经明白Promise是一个特殊的对象,其中javascript帮助我们处理异步任务并捕获由它产生的错误.

我熟悉以下用法:

func_returning_promise( )
.then((param)=>{do stuff with the param ; }
.catch((error) =>{console.log(error); }
Run Code Online (Sandbox Code Playgroud)

我怎么也不喜欢像这样使用的.then和.catch,所以我将Promise存储在一个变量中var myprom = func_returning_promise().

但是当我调用这样的"then"和"catch"方法时,根本不会处理错误并且不执行catch处理程序.

var myprom = func_returning_promise();
myprom.then((param)=> do stuff with param ) ; 
myprom.catch((error)=> console.log(error)) ;
Run Code Online (Sandbox Code Playgroud)

为什么我仍然会出错并且为什么它不会执行catch处理程序?

它与方法semicolon ;结束时的put 有什么关系then吗?

这不是问题之前或之后的问题的重复

我的问题不是关于所提出的问题所涉及的所有问题的解释.

JLR*_*she 10

您的第一个和第二个代码段不相同.

在第一个中,.catch()将处理在处理程序中func_returning_promise() .then()处理程序中抛出的任何错误.

在第二个中,.catch()被链接到原始的承诺,所以它只会捕获投入的错误func_returning_promise().

为了实现无链的第一个例子相当于,你将不得不结果分配的.then一个变量,并呼吁catch:

var myprom = func_returning_promise();

var mysecondprom = myprom.then((param)=> do stuff with param ) ; 

mysecondprom.catch((error)=> console.log(error)) ;
Run Code Online (Sandbox Code Playgroud)

承诺被设计为链接.那么为什么不链接它们?