温故知新(九四)Promise 规范相关

两次返回结果

const promise1 = new Promise((resolve, reject) => { resolve('promise1') })

const promise2 = new Promise((resolve, reject) => { resolve('promise2') })

promise1
  .then(function () {
    return promise2
  })
  .then(function (val) {
    console.log(val)
  })

const promise1 = new Promise((resolve, reject) => { resolve('promise1') })

const promise2 = new Promise((resolve, reject) => { resolve('promise2') })

promise1
  .then(function () {
    return '666'
  })
  .then(function (val) {
    console.log(val)
  })

解答:

第一次:promise2

第二次:  666

Promise 解决过程是⼀个抽象的操作,其需输⼊⼀个 promise 和⼀个值,我们表示为 [[Resolve]] (promise, x) (这句话的意思就是把 promise resolve 了,同时传⼊ x 作为值)

promise.then(function(x) {
 console.log('会执⾏这个函数,同时传⼊ x 变量的值', x);
});

如果 x 有 then ⽅法且看上去像⼀个 Promise ,解决程序即尝试使 promise 接受 x 的状态;否则其 ⽤ x 的值来执⾏ promise 。

如果 promise 和 x 指向同⼀对象,以 TypeError 为据因拒绝执⾏ promise

如果 x 为 promise

        如果 x 处于等待态, promise 需保持为等待态直⾄ x 被执⾏或拒绝

        如果 x 处于执⾏态,⽤相同的值执⾏ promise

        如果 x 处于拒绝态,⽤相同的据因拒绝 promise

如果 x 为 Object 或 function(不常⻅)

        ⾸先尝试执⾏ x.then

        如果取 x.then 的值时抛出错误 e ,则以 e 为据因拒绝 promise

        如果 then 是函数,将 x 作为函数的作⽤域 this 调⽤。传递两个回调函数作为参数,第⼀ 个参数叫做 resolvePromise ,第⼆个参数叫做 rejectPromise :

                如果 resolvePromise 以值 y 为参数被调⽤,则运⾏ [[Resolve]](promise, y)

                如果 rejectPromise 以据因 r 为参数被调⽤,则以据因 r 拒绝 promise

                如果 resolvePromise 和 rejectPromise 均被调⽤,或者被同⼀参数调⽤了多次,则优先 采⽤⾸次调⽤并忽略其他的调⽤

                如果调⽤ then ⽅法抛出了异常 e

                       如果 resolvePromise 或 rejectPromise 已经被调⽤,则忽略

                        否则以 e 为据因拒绝 promise

        如果 then 不为函数,以 x 为参数将 promise 变为已完成状态

如果 x 不为对象或者函数,以 x 为参数将 promise 变为已完成状态(重要且常⻅)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值