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

发布于 2022-09-05 23:53:32 字数 577 浏览 25 评论 0

    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值?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

与酒说心事 2022-09-12 23:53:32

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

且行且努力 2022-09-12 23:53:32

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

Promise.resolve('newPromise').then(res=>aPromise).then((res)=>{
    res.then((res)=>{
        console.log(res) // ==> 'aPromise'
    })
});
甜`诱少女 2022-09-12 23:53:32

你打印的本来就是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的返回值

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文