第一个返回的是promise实例,第四个返回的是dosomethingelse函数这个参数
then链式调用,参数为一个函数作为回调,它不用显示调用就会执行。他会依次等dosomething返回结果后再执行dosomeelse,等else执行完,最后handle再执行。
我的理解是——一个栈中的代码会依次执行(无缝连接),之间相差极小时间,因此看起来就像同时执行
因为 .then() 后面可以接着 .then()
https://github.com/merrier/imooc-promise-sample
我觉得这里你需要再听一下老师的解释!
个人理解:
funa与 funb都是函数调用,因此几乎是同时执行的,这里你或许不理解为什么不是先then了在执行?主要是因为premise语法要求,因为then的参数是premise,这个then会被忽略【此处老师也有解释】,所以可以理解funa与funb几乎是一起执行的【当然是有先后的,只是差不多可以忽略了】。
最后解释下,为啥返回的premise是a, 有上面的解释可以知道then被忽略了,返回值就是funa返回的premise,答案也正如老师所解释的一样,不知道我这么说,你是否能接受?
...
第一种:throw用来抛出问题,抛出问题后,接下来会执行.then里的内容。即返回了一个promise实例,但是,在执行这个实例的过程中,会不会有错误呢?那就要用到catch来捕捉,但是因为是异步的,系统认为我返回了一个结果(有还是没有错误,错误在哪),所有的事都做完了。 第二种:那么如何来让系统真正的执行所有的事呢,那要在实例中再抛出一个问题,这时系统会跳过then,直接执行catch。
异步吧,调用后即返回,所以与下一条语句运行时间相差很小,可以参考下C语言中关于异步的解释。
你试着百度一下we have a problem with promise