有没有办法让.then()方法中的处理程序访问新创建的Promise对象?

时间:2017-11-02 06:57:31

标签: es6-promise

我有这样的链接承诺:

function abcd() {
  var date = new Date();
  document.body.innerHTML = "<h1>Today is: " + date + "</h1>";
}

setInterval(abcd, 1000);

现在我想在doSomething1().then(doSomething2).then(doSomething3) ... 方法返回的每个Promise对象上放置一个标记,以便以后进行代码分析。 .then()作为匿名函数,其上下文默认为doSomething对象。有没有办法设置处理程序的上下文window指向新创建的Promise对象?

另外,有没有办法列出附加到特定this对象的所有即时then()

1 个答案:

答案 0 :(得分:0)

您可以定义要使用对象调用的函数,并使用arrow function作为执行者传递给Promise构造函数,以保留this引用定义函数的对象的上下文。< / p>

&#13;
&#13;
let promises = {
  marker: "I'm before the first step Promise!",
  doSomething1() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        this.marker = "I'm the first step Promise!";
        console.log(this.marker);
        resolve(this);
      }, Math.floor(Math.random() * 900))
    })
  },
  doSomething2() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        this.marker = "I'm the second step Promise!";
        console.log(this.marker);
        resolve(this);
      }, Math.floor(Math.random() * 1200))
    })
  },
  doSomething3() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        this.marker = "I'm the third step Promise!";
        console.log(this.marker);
        resolve(this);
      }, Math.floor(Math.random() * 1500))
    })
  }
}

console.log(promises.marker);

promises.doSomething1()
.then(promises.doSomething2)
.then(promises.doSomething3)
&#13;
&#13;
&#13;