Closed sailei1 closed 5 years ago
未来值 想当于一个时间占位符 它可能成功 也可能会失败
由于 Promise 封装了依赖于时间的状态——等待底层值的完成或拒绝,所以 Promise 本身是与时间无关的 一旦 Promise 决议,它就永远保持在这个状态。此时它就成为了不变值 Promise 一旦决议就不可再变
Promise 这种模式通过可信任的语义把回调作为参数传递,使得这种行为更可靠更合理。 通过把回调的控制反转反转回来,我们把控制权放在了一个可信任的系统(Promise)中, 这种系统的设计目的就是为了使异步编码更清晰。
调用 Promise 的 then(..) 会自动创建一个新的 Promise 从调用返回。 在完成或拒绝处理函数内部,如果返回一个值或抛出一个异常,新返回的(可链接的) Promise 就相应地决议。 如果完成或拒绝处理函数返回一个 Promise,它将会被展开,这样一来,不管它的决议 值是什么,都会成为当前 then(..) 返回的链接 Promise 的决议值。
var rejectedPr = new Promise( function(resolve,reject){ // 用一个被拒绝的promise完成这个promise resolve( Promise.reject( "Oops" ) ); } ); rejectedPr.then( function fulfilled(){ console.log('reslove') //不会到这里 }, function rejected(err){ console.log( err ); } ) //结果输出 Oops
try..catch 只适用于 同步代码 不适用于异步代码
从Promise.all([ .. ])返回的主promise在且仅在所有的成员promise都完成后才会完 成。如果这些promise中有任何一个被拒绝的话,主Promise.all([ .. ])promise就会立 即被拒绝,并丢弃来自其他所有 promise 的全部结果。
Promise.race([ .. ])也接受单个数组参数。这个数组由一个或多个Promise、thenable或 立即值组成。立即值之间的竞争在实践中没有太大意义,因为显然列表中的第一个会获 胜,就像赛跑中有一个选手是从终点开始比赛一样!
与Promise.all([ .. ])类似,一旦有任何一个Promise决议为完成,Promise.race([ .. ]) 就会完成;一旦有任何一个 Promise 决议为拒绝,它就会拒绝。
Promise 局限性
顺序错误处理 返回 单一值 Promise 只能被决议一次(完成或拒绝) 惯性 用了promise 后面处理方式还是promise 直到完成或拒绝 无法取消的 Promise Promise 与不可信任的裸回调函数相比会更慢一些
Promise原理解析
未来值 想当于一个时间占位符 它可能成功 也可能会失败
由于 Promise 封装了依赖于时间的状态——等待底层值的完成或拒绝,所以 Promise 本身是与时间无关的 一旦 Promise 决议,它就永远保持在这个状态。此时它就成为了不变值 Promise 一旦决议就不可再变
Promise 这种模式通过可信任的语义把回调作为参数传递,使得这种行为更可靠更合理。 通过把回调的控制反转反转回来,我们把控制权放在了一个可信任的系统(Promise)中, 这种系统的设计目的就是为了使异步编码更清晰。
调用 Promise 的 then(..) 会自动创建一个新的 Promise 从调用返回。 在完成或拒绝处理函数内部,如果返回一个值或抛出一个异常,新返回的(可链接的) Promise 就相应地决议。 如果完成或拒绝处理函数返回一个 Promise,它将会被展开,这样一来,不管它的决议 值是什么,都会成为当前 then(..) 返回的链接 Promise 的决议值。
try..catch 只适用于 同步代码 不适用于异步代码
从Promise.all([ .. ])返回的主promise在且仅在所有的成员promise都完成后才会完 成。如果这些promise中有任何一个被拒绝的话,主Promise.all([ .. ])promise就会立 即被拒绝,并丢弃来自其他所有 promise 的全部结果。
Promise.race([ .. ])也接受单个数组参数。这个数组由一个或多个Promise、thenable或 立即值组成。立即值之间的竞争在实践中没有太大意义,因为显然列表中的第一个会获 胜,就像赛跑中有一个选手是从终点开始比赛一样!
与Promise.all([ .. ])类似,一旦有任何一个Promise决议为完成,Promise.race([ .. ]) 就会完成;一旦有任何一个 Promise 决议为拒绝,它就会拒绝。
Promise 局限性
顺序错误处理 返回 单一值 Promise 只能被决议一次(完成或拒绝) 惯性 用了promise 后面处理方式还是promise 直到完成或拒绝 无法取消的 Promise Promise 与不可信任的裸回调函数相比会更慢一些
Promise原理解析