Promise执行的问题求解

  let  p  = new Promise(
      r=>{
          console.log("rrr");
          r("ok")
      }
  )

上面代码,会执行console.log,这个应该没问题

如果加了下面的代码,不是应该再执行一次console.log吗?不明白了。。

p.then(
    r=>{
        console.log(r);
    }
)

ps,修改问题:不好意思,表达的非常不清楚 之前一直以为new Promsie(...)内部的同步代码会被执行两次,new Promise()的时候一次, p().then(...)的时候执行一次

阅读 1.6k
2 个回答

没什么难理解的,你变量p这个Promiseresolve在你定义的那一刻已经触发了,你的then什么时候调用已经跟这个resolve无关,并不会再次执行函数内的代码去触发console.log

你只有这样写

let p = () => new Promise(
  r => {
    console.log('rrr');
    r('ok');
  },
);

每次返回都是新的Promise了,才能每次都触发p里面的console.log

p().then(
  r => {
    console.log(r);
  },
);

先执行上面的console.log("rrr"),打印rrr,再执行下面的console.log(r),此时r是上面r('ok')的参数,打印ok

所以,你不明白什么

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