返回任意一个非 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()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。