promise的then返回一个promise,为何下个then收到的不是一个promise对象而是其resolve值?

    let aPromise = new Promise(resolve=>{
        resolve('aPromise');
    })
    
    console.log(aPromise); // ==> Promise {'aPromise'}
    

这里直接打印aPromise,是值为'aPromise'的一个promise对象

    let aPromise = new Promise(resolve=>{
        resolve('aPromise');
    })    
    
    Promise.resolve('newPromise').then(res=>aPromise).then((res)=>{
        console.log(res) // ==> 'aPromise'
    });

为什么在newPromise的then中间直接return aPromise,下一个then的res不是aPromise这个对象。而是其resolve值?

这有什么原理吗?这么设计有什么好处吗?

阅读 5.9k
3 个回答

比如你有两个请求A和B,A请求成功才会请求B,那么在A的resolve中返回B的promise,就可以在下一个then的resolve中直接处理B了,即形成promise的链式调用,在流程复杂的时候会很清晰地展现出代码的逻辑

如果返回的是aPromise这个对象你要怎么写
这样?那其链式回调的意义在哪代码更加复杂那到底谁的成功先执行流程错乱

Promise.resolve('newPromise').then(res=>aPromise).then((res)=>{
    res.then((res)=>{
        console.log(res) // ==> 'aPromise'
    })
});

你打印的本来就是promise返回的值,就像jquery的ajax方法一下,

$.get('xxx').then((response)=>{
    console.log(response) // 这里本来就是promise返回的值
})
// 你的第二种写法就相当于
// 创建一个promise对象,这个promise的返回值是‘aPromise’
let aPromise = new Promise(resolve=>{
        resolve('aPromise');
    })
// 监听promise,并打印出promise传递的值
aPromise.then(response=>{
    console.log(response)
})

你的第一种写法是打印的promise对象,第二种写法是打印的promise的返回值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏