Метод цепочки с обещаниями - PullRequest
0 голосов
/ 29 мая 2018

Я хочу реализовать шаблон цепочки классических методов, конечное использование должно быть

DB
  .push(2)
  .push(3)

Это текущий код, очевидно, не работает, мне не ясно, как вернуть ссылку наСама БД разрешает обещание

let nodes = [];
let DB = {
    self:this,
    push: (i) => new Promise((resolve, reject) => {
        nodes.push(i)
        resolve(this)
    })
}

1 Ответ

0 голосов
/ 29 мая 2018

Только экземпляр class или function имеет ссылку this.

class DB {
  constructor() {
    this.nodes = [];
    this.promise = Promise.resolve();
  }
  push(i) {
    this.nodes.push(i);
    return this;
  }
  pushAsync(i) {
    return new Promise((resolve) => {
      this.nodes.push(i);
      resolve();
    });
  }
  pushAsyncChain(i) {
    this.promise.then(() => {
      this.promise = new Promise((resolve) => {
        this.nodes.push(i);
        resolve();
      });
    });
    return this;
  }
  then(callback) {
    this.promise.then(callback);
  }
}

const db = new DB();
db.push(2).push(3);
db.pushAsync(4).then(() => db.pushAsync(5));
db
  .pushAsyncChain(6)
  .pushAsyncChain(7)
  .then(() => console.log(db.nodes)); // or await db.promise; console.log(db.nodes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...