Javascript Promise:Promise竞赛中的setTimeout问题

时间:2018-11-10 08:55:18

标签: javascript node.js promise

以下代码输出(1)然后(3)抽动不正确..为什么?

以下代码旨在等待3秒钟,然后打印(3),然后再等待1秒钟,然后打印(1) 因此正确的顺序必须是(3)然后是(1)

我猜问题是wait()返回一个新的Promise,但是我该如何解决此问题 注意:所有函数都必须返回“ this”进行链接

class test extends Promise {
  constructor(fn) {
    super(fn)
    return this
  }

  wait(seconds) {
    return new test(resolve =>
      setTimeout(function() {
        resolve(seconds)
      }, seconds * 1000)
    )
  }

  done(fn) {
    return super.then(fn)
  }
}

p = new test(r => r())
p.wait(3) //(2) must be before (1)
  .done(x => console.log(x))
  .wait(1)
  .done(x => console.log(x))

1 个答案:

答案 0 :(得分:3)

您需要wait在当前.then对象(即test)上调用this ,并返回构造的{{ 1}}链:

Promise