V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
peter520
V2EX  ›  问与答

前端 promise 笔试题,有大佬解答下吗?

  •  
  •   peter520 · 2021-05-26 19:48:27 +08:00 · 461 次点击
    这是一个创建于 1036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    let resolvePromise = new Promise(resolve => {
      let resolvedPromise = Promise.resolve()
      resolve(resolvedPromise)
    })
    resolvePromise.then(() => {
      console.log('resolvePromise resolved')
    })
    let resolvePromiseThen = Promise.resolve().then(res => {
      console.log('promise1')
    })
    resolvePromiseThen.then(() => {
      console.log('promise2')
    }).then(() => {
      console.log('promise3')
    })
    

    输出是 promise1 promise2 resolvePromise resolved promise3

    大佬们求解释

    2 条回复    2021-05-31 09:53:45 +08:00
    he1a2s0
        1
    he1a2s0  
       2021-05-31 09:51:50 +08:00
    https://www.promisejs.org/implementing/ 的实现为例,promise 内部使用 setTimeout(function,0)来调用后续操作,所以基本上可按嵌套关系和顺序来用 setTimeout 替换一下,整段代码使用 setTimeout 来描述应该是:

    ```typescript
    setTimeout(()=> {
    setTimeout(()=>{
    console.log('resolvePromise resolved')
    },0)
    },0)

    setTimeout(()=>{
    console.log('promise1')
    },0)

    setTimeout(()=>{
    console.log('promise2')

    setTimeout(()=>{
    console.log('promise3')
    },0)
    })
    ```
    运行下来会得到同样的输出
    he1a2s0
        2
    he1a2s0  
       2021-05-31 09:53:45 +08:00
    不知道回复怎么发代码。。格式乱了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5255 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:36 · PVG 17:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.