Promise.then方法 返回值

var p = Promise.resolve(1)
p.then((value)=>{
    //1、返回一个Promise 调用resolve
    return new Promise(function(resolve,rejected){
        resolve(value + 1)
    })
    //2、返回一个Promise 调用rejected
    return new Promise(function(resolve,rejected){
        rejected(value + 1)
    })
    //3、返回一个值
     return value + 1;

    //4、新建一个promise,使用reslove返回值
    const newp = new Promise(function(resolve,rejected){
        resolve(value + 1)
    })

    //5、新建一个promise,使用return返回值
    const newp = new Promise(function(resolve,rejected){
        return(value + 1)
    })

    //6、没有返回值
    return undefined
}).then((value)=>{
   console.log("情况{n}:resolve",value)
}, (res) => {
    console.log("情况{n}:reject", res);
})

结果分析:

情况1:resolve 2

新建promise的resolve传出的值将作为then方法返回的promise的resolve的值传递出

结果:resolve 2
情况2:reject 2

新建promise的reject传出的值将作为then方法返回的promise的reject的值传递出

结果:reject 2

情况3:resolve 2

return的值将作为then方法返回的promise的resolve的值传递出

结果:resolve 2
情况4:resolve undefined
情况5:resolve undefined
情况6:resolve undefined

以上四、五、六种情况,then方法的函数没有返回值,导致下一个then的resolve参数是undfined

Promise 中reject 和 catch 处理上有什么区别?
reject 是用来抛出异常,catch 是用来处理异常
reject 是 Promise 的方法,而 catch 是 Promise 实例的方法
reject后的东西,一定会进入then中的第二个回调,如果then中没有写第二个回调,则进入catch
网络异常(比如断网),会直接进入catch而不会进入then的第二个回调

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是手写一个简单的 Promise.then() 方法的实现方式: ```javascript function MyPromise(executor) { this.status = 'pending'; this.value = undefined; this.onResolvedCallbacks = []; const resolve = (value) => { if (this.status === 'pending') { this.status = 'fulfilled'; this.value = value; this.onResolvedCallbacks.forEach((callback) => { callback(this.value); }); } }; executor(resolve); } MyPromise.prototype.then = function (onResolved) { return new MyPromise((resolve) => { if (this.status === 'fulfilled') { // 如果状态已经是 fulfilled,则直接执行回调函数 resolve(onResolved(this.value)); } else { // 如果状态还是 pending,则将回调函数加入到待执行列表中 this.onResolvedCallbacks.push((value) => { resolve(onResolved(value)); }); } }); }; // 使用示例 const p = new MyPromise((resolve) => { setTimeout(() => { resolve('Hello, World!'); }, 2000); }); p.then((value) => { console.log(value); // 输出: 'Hello, World!' }).then(() => { console.log('Done'); }); ``` 在上述代码中,我们定义了一个 `MyPromise` 构造函数,它接受一个执行器函数 `executor`,并创建一个新的 Promise 对象。在 `MyPromise` 的原型上定义了 `then` 方法,用于添加回调函数。 在 `then` 方法中,我们首先判断当前 Promise 的状态。如果状态是已完成 (`fulfilled`),则直接执行传入的回调函数 `onResolved`,并使用 `resolve` 方法创建一个新的 Promise 对象,并将回调函数的返回值作为新 Promise 的值传递。 如果状态仍然是待定 (`pending`),则将回调函数加入到待执行列表 `onResolvedCallbacks` 中。当 Promise 的状态变为已完成时,会依次执行待执行列表中的回调函数,并传递相应的值。 需要注意的是,上述实现只是 Promise.then() 方法的简化版本,并没有考虑到其他情况(如错误处理、链式调用等)。完整的 Promise 实现还包括对这些情况的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值