关于JavaScript Promise的小问题

想知道为什么then回调函数中可以使用return value来传递给下一个then

Promise.resolve().then(function(){
    new Promise(resolve=>{
        resolve('seg'); //返回状态为Fulfilled的实例
    })
    return Promise.resolve('hello'); 
    return 'hello'
}).then(function(value){
    console.log(value);
})

1.下面这两种写法是等价的吗?
return Promise.resolve('hello');
return 'hello'

2.如果一个then回调里啥都没写,是不是会默认调用一个 return ; ?


还有一个之前看过的题 输出是777 666 888,一直想不明白,有兴趣的大神可以看看,能为我指点一下迷津就更好了

 new Promise(resolve => {
          resolve();
      }).then(() => {
            new Promise(resolve => {
                resolve();
            }).then(() => {
                    console.log(777);
                }).then(() => {
                    console.log(888);            
                });
      }).then(() => {
          console.log(666);
      });
阅读 1.4k
2 个回答

这个then,这个then函数它是创建了一个新的promise对象并返回的,所以这就是为什么你能再接着调用then。

  1. 不是等价的。

return Promise.resolve('hello')返回了一个Promise,而return 'hello'返回了一个基本字符串类型。
当一个Promise Executor执行完毕时,如果没有任何返回值,并在执行过程中未发生任何Uncaught Error,则视其状态为Resolved,并将返回值作为后续Executor的入参。特别地,如果返回的是一个Promise,那么会继续等待这个Promise的状态变为Resolved的状态后再继续。

  1. 不是默认调用,是因为没有返回值,所以返回值是undefined

最后的问题,本质是微任务队列的执行顺序。重点还是等待前序任务变为Resolved状态后才能继续执行。

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