第一个返回的是promise实例,第四个返回的是dosomethingelse函数这个参数
then链式调用,参数为一个函数作为回调,它不用显示调用就会执行。他会依次等dosomething返回结果后再执行dosomeelse,等else执行完,最后handle再执行。
把代码拿出来,这么看不清楚啊
这个代码才多少,自己写一下不好吗
人家老师代码里在1-1前也没写console.log(value)啊,弟弟,你这个100是接受的外层resolve里的参数
我的理解是——一个栈中的代码会依次执行(无缝连接),之间相差极小时间,因此看起来就像同时执行
版主这么恶劣广告手法,鄙视。
因为 .then() 后面可以接着 .then()
https://github.com/merrier/imooc-promise-sample
遇到了和你一样的问题,你在这个位置加上一个分号就可以了,我也是试出来的,有知道原因的可以帮忙解答下
对的,代码里已经演示过了
这是入门课程啊,慢点是正常的,您要不习惯,可以去看其他的
3.3错误处理一节,课程里讲的不对。 计时器里抛出的异常并不能被catch 捕获到。
new Promise((resolve,reject)=>{ setTimeout(()=>{ //此处抛出的异常是因为没有被捕获所以会在控制台被打印出来。 throw new Error("bye"); },2000); // throw new Error("bye2") //同步的方式执行会被promise处理成reject立即调用,可以被后面的catch捕获到 }) .then(value=>{ console.log(value+" world"); }) .catch(error=>{// //并没有执行 如果 console.log("Error1: ",error.message); })
我觉得这里你需要再听一下老师的解释!
个人理解:
funa与 funb都是函数调用,因此几乎是同时执行的,这里你或许不理解为什么不是先then了在执行?主要是因为premise语法要求,因为then的参数是premise,这个then会被忽略【此处老师也有解释】,所以可以理解funa与funb几乎是一起执行的【当然是有先后的,只是差不多可以忽略了】。
最后解释下,为啥返回的premise是a, 有上面的解释可以知道then被忽略了,返回值就是funa返回的premise,答案也正如老师所解释的一样,不知道我这么说,你是否能接受?
先把console.log中的promise1 之类的加个分号 控制台返回primise实例是什么意思?pending不是在等待吗
你的代码写错了,第二个计时器的时间(15000秒)没放对位置。
只会基础不行哦,实际项目中用到那些高阶的知识点还挺多的,建议多看多理解!
谢谢分享。
...
什么啊
异常第一次被捕获,就不会再被捕获了,类似Java机制
new Promise((resolve, reject) => {
setTimeout(() => { reject('bye') }, 2000)
})
.then(
value => { console.log(value); },
error => {
console.log("error:" + error)
})
.catch(error => { console.log("catch:" + error); })
一个then中返回一个promise,进入下一个then,又会返回一个promise,就算进入到catch也会返回一个promise
promise是用来解决异步函数的顺序问题. 比如,有两个回调函数,你怎么让他们能够按照你所书写的顺序进行执行.要知道,虽然是先后书写的函数,但是返回所需要的时间是不一致的.所以会产生混乱.