js es6 promise 中 resolve 如何传递多个参数?

发布于 09-06 10:43 字数 524 浏览 13 评论 0

我期望的效果是

//我希望类似与这样使用,但实际上后面两个参数无法获取
promise = new Promise((resolve,reject)=>{
    let a = 1
    let b = 2
    let c = 3
    resolve(a,b,c) 
})

promise.then((a,b,c)=>{
    console.log(a,b,c)
})

//但实际上这样可以实现
promise2 = new Promise((resolve,reject)=>{
    let a = 1
    let b = 2
    let c = 3
    resolve([a,b,c]) //中括号意味着支持 a.attr1 这样的形式,{}花括号不支持。
})

promise2.then(([a,b,c])=>{
    console.log(a,b,c)
})

虽然上面可以模拟多个参数,但是每次在then的时候都需要添加[]感觉别捏,有更简介的方式吗?

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

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

发布评论

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

评论(4

无风消散2022-09-13 10:43:32

resolve() 只能接受并处理一个参数,多余的参数会被忽略掉。 spec上就是这样规定。

用数组wrap一下可以传多个参数,但是resolve出来的结果自然就是个数组了。

嘿看小鸭子会跑2022-09-13 10:43:32

可以换个思路,把a,b,c数据放在一个对象里面

深海夜未眠2022-09-13 10:43:32

可能是为了与之后的async/await考虑,所以才限制只能返回一个值。
应该可以自己包装一个类实现类似功能吧

变身佩奇2022-09-13 10:43:32

可以这么写

promise2 = new Promise((resolve,reject)=>{
    let a = 1
    let b = 2
    let c = 3
    resolve({a,b,c}) 
})

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