1

返回任意一个非 promise 的值都会被包裹成 promise 对象,

返回任意一个非 promise 的值都会被包裹成 promise 对象,因此这里的return new Error('error!!!')也被包裹成了return Promise.resolve(new Error('error!!!'))。
当然如果你抛出一个错误的话,可以用下面两的任意一种:
return Promise.reject(new Error('error!!!'));
// or
throw new Error('error!!!')

返回的值

.then 或 .catch 返回的值不能是 promise 本身,否则会造成死循环。

值透传

.then 或者 .catch 的参数期望是函数,传入非函数则会发生值透传。

第一个then和第二个then中传入的都不是函数,一个是数字类型,一个是对象类型,因此发生了透传,将resolve(1) 的值直接传到最后一个then里。

Promise.all() .race()

Promise.all().then()结果中数组的顺序和Promise.all()接收到的数组顺序一致。

通俗来说,.all()的作用是接收一组异步任务,
然后并行执行异步任务,并且在所有异步操作执行完后才执行回调。
.race()的作用也是接收一组异步任务,
然后并行执行异步任务,只保留取第一个执行完成的异步操作的结果,
其他的方法仍在执行,不过执行结果会被抛弃。

await后面的内容就相当于放到了Promise.then的里面

你可以理解为await后面的内容就相当于放到了Promise.then的里面。
正常情况下,async中的await命令是一个Promise对象,返回该对象的结果。

但如果不是Promise对象的话,就会直接返回对应的值,相当于Promise.resolve()

HappyCodingTop
526 声望847 粉丝

Talk is cheap, show the code!!


« 上一篇
虚拟dom

引用和评论

0 条评论