关于promise状态及参数传递的问题

wint3r 2018-11-16 04:18:30
// code1
var p1 = new Promise((resolve, reject)=>resolve('ff'));
var p2 = new Promise((resolve, reject)=>reject(p1));
p2.then(result => console.log('1', result)).catch(error => console.log('2', error))
// 输出:2

// code2
var p1 = new Promise((resolve, reject)=>reject('ff'));
var p2 = new Promise((resolve, reject)=>resolve(p1));
p2.then(result => console.log('1', result)).catch(error => console.log('2', error))
// 输出:2 ff

code1运行后p1 p2的状态分别为resolved rejected,code1运行后p1 p2的状态分别为rejected rejected。根据相关资料的说法,p2的状态应该由p1决定,为什么code1中p2与p1的状态不一致呢;还有为什么code1中没能输出"ff"呢?

...全文
829 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wint3r 2018-11-20
  • 打赏
  • 举报
回复
引用 3 楼 xzy21com 的回复:
// code1 var p1 = new Promise((resolve, reject)=>resolve('ff')); // p1很明显就是resolve var p2 = new Promise((resolve, reject)=>reject(p1)); // p2很明显就是rejected呀,而p1只是它的参数。两者不相关。 p2.then(result => console.log('1', result)).catch(error => console.log('2', error))
那code2中,p2的状态为什么不是resolved呢
scscms太阳光 2018-11-19
  • 打赏
  • 举报
回复
// code1
var p1 = new Promise((resolve, reject)=>resolve('ff')); // p1很明显就是resolve
var p2 = new Promise((resolve, reject)=>reject(p1)); // p2很明显就是rejected呀,而p1只是它的参数。两者不相关。
p2.then(result => console.log('1', result)).catch(error => console.log('2', error))
wint3r 2018-11-16
  • 打赏
  • 举报
回复
引用 1 楼 xzy21com 的回复:
其实在code1中它一样把resolve('ff')以error变量传入了catch里,只是resolve()必须在.then里触发。不能在catch里触发。 准确的来说code1结果是返回:2 Promise {<resolved>: "ff"}
先谢过大佬,我还有个疑问就是:code1运行后,查看p2的状态为何是rejected呢,而不是与p1一致呢
scscms太阳光 2018-11-16
  • 打赏
  • 举报
回复
其实在code1中它一样把resolve('ff')以error变量传入了catch里,只是resolve()必须在.then里触发。不能在catch里触发。
准确的来说code1结果是返回:2 Promise {<resolved>: "ff"}

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧