Open yuqingc opened 4 years ago
状态
Pending
Fulfilled (Resolved)
Rejected
初始状态是 Pending
Settled 的状态为 Fulfilled 和 Rejected
Settled 的状态永远不能被改变
优秀的代码需要处理成功、失败、和一直 Pending 的状态(定时器 reject 超时)
resolve with a value
value
reject with a reason
reason
Promise.resolve
初始化一个 Fulfilled 状态的 Promise
如果传入一个 Promise,则会直接返回该 Promise
Promise.reject
async 函数执行返回一个 Promise,并 resolve 出 return 的值
async
如果 async 函数返回一个 Promise 或者 thenable 的值,则会自动解开为普通的值
如果 async 函数内没有 await,则函数执行的行为和同步函数一样
await
如果有 await,哪怕 await 一个非 Promise 的值,函数也会把这行语句异步执行(放入队列)
看一道题
async function foo() { console.log(2); console.log(await Promise.resolve(8)); console.log(9); } async function bar() { console.log(4); console.log(await 6); console.log(7); } console.log(1); foo(); console.log(3); bar(); console.log(5); // 1 // 2 // 3 // 4 // 5 // 6 // 7 // 8 // 9
此处红宝书说的有问题,我用浏览器跑了一下发现顺序是 1 2 3 4 5 8 9 6 7
11 Promise 和异步函数
异步编程
Promise
基础
Promise 状态机
状态
Pending
Fulfilled (Resolved)
Rejected
初始状态是 Pending
Settled 的状态为 Fulfilled 和 Rejected
Settled 的状态永远不能被改变
优秀的代码需要处理成功、失败、和一直 Pending 的状态(定时器 reject 超时)
Settle 的值、用途
resolve with a
value
reject with a
reason
Promise.resolve
初始化一个 Fulfilled 状态的 Promise
如果传入一个 Promise,则会直接返回该 Promise
Promise.reject
async 函数
基础
async
函数执行返回一个 Promise,并 resolve 出 return 的值如果 async 函数返回一个 Promise 或者 thenable 的值,则会自动解开为普通的值
异步
如果 async 函数内没有
await
,则函数执行的行为和同步函数一样如果有 await,哪怕 await 一个非 Promise 的值,函数也会把这行语句异步执行(放入队列)
看一道题
此处红宝书说的有问题,我用浏览器跑了一下发现顺序是 1 2 3 4 5 8 9 6 7