Promise.then方法的返回值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Promise.then方法的返回值问题相关的知识,希望对你有一定的参考价值。

参考技术A 按照学习理解:

第一种情况,新建promise的resolve传出的值将作为then方法返回的promise的resolve的值传递出,console将打印出43

第二种情况,return的值将作为then方法返回的promise的resolve的值传递出,console将打印出44

第三种情况,虽然新建了promise,但对于then方法来说,没有向它返回的promise传递返回值,console将打印出undifined

第四种情况,同第三种情况,

第五种情况,then方法没有返回值,then方法的promise的resolve的值将传递出undifined。

以上三、四、五种情况,其实都是一样的问题,构造then方法的函数没有向then方法返回的promise对象的resolve方法传递值。因此resolve返回的都是undfined

测试结果:

测试结果:

三秒后打出结果

09 promise then


then() 方法返回一个 Promise
链式调用:then里面回调函数(成功回调和失败回调),凡事这两个回调函数里面抛出错误或者返回一个已经是拒绝状态的 Promise
那么 then 返回的 Promise 对象将是rejected状态,走下一个then里面的失败回调函数
 

try-catch

new Promise((resolve, reject) => {
  resolve(1)
}).then(data => {
  console.log(data)
  return 2
 
}).then(data => {
  console.log(data);
  return Promise.reject(20) //一旦promise变为rejected直接走catch 后面的人所有then都不走

}).then(data => {
  console.log(data)
}).catch(err => {
  console.log(err)
})
//1 2 20

then两个回调函数

 then两个回调函数,上一个then的promise状态变为rejected 状态,就走临近下一个then的失败回调函数,不会直接调到最后一个

//
new Promise((resolve, reject) => {
  resolve(1)
})
  .then(data => {
    console.log(data)
    return Promise.reject(20)

  }, err => {
    console.log(err)
    return 3
  })

  .then(data => {
    console.log(data);

  }, err => {
    console.log(err);
    return 3

  })

  .then(data => {
    console.log(data);

  }, err => {
    console.log(err);

  })
  //1 20 3

 

 

以上是关于Promise.then方法的返回值问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 axios 返回布尔值

09 promise then

那么如何处理 if-else in promise 呢?

es6 promise then对异常处理的方法

promise.all方法合并请求接口的两个值

在 promise.then 或 promise.catch 中调用时,Array.push 的工作很奇怪