Это часть более крупной проблемы, но как я могу подключить метод вызовов к классу, когда им требуется promise
решить, чтобы получить данные.
Ниже не будет работать, когда this.promise
в настоящее время назначается каждый раз, когда функция уже вернулась с this
class Test {
constructor(promise) {
this.promise = promise;
}
add(x) {
this.promise.then(y => {
this.promise = new Promise(resolve => {
resolve(x + y);
});
});
return this;
}
multiply(x) {
this.promise.then(y => {
this.promise = new Promise(resolve => {
resolve(x * y);
});
});
return this;
}
answer() {
this.promise.then(x => {
console.log(x);
});
}
}
function getNumber(num) {
const promise = new Promise(resolve => {
resolve(num);
});
return new Test(promise);
}
const num = getNumber(30);
num.add(20).multiply(2).answer(); // Outputs 33 instead of 100: (30 + 20) * 2
Вы можете просто переназначить результат then
(это еще одно обещание) этому. this.promise
методов. Это обеспечит this.promise
всегда является последним обещанием в цепочке.
class Test {
constructor(promise) {
this.promise = promise;
}
add(x) {
const promise = this.promise.then(num => num + x)
return new Test(promise);
}
multiply(x) {
const promise = this.promise.then(num => x * num)
return new Test(promise);
}
answer() {
this.promise.then(console.log)
}
}
function getNumber(num) {
const promise = new Promise(resolve => {
resolve(num);
});
return new Test(promise);
}
const num = getNumber(30);
num.add(20).multiply(2).answer(); // Outputs 100: (30 + 20) * 2
num.add(5).multiply(3).answer(); // Outputs 105: (30 + 5) * 3
Я хотел бы избежать переназначения this.promise
. Я бы не стал членом этого класса. Вам просто нужно, чтобы ваши методы вернули обещание.
Если вы хотите избежать использования. .then
, посмотрите на использование async
/await
.
num.add(20).multiply(2).answer();
на num.add(20).multiply(2).answer();
стал бы очень неаккуратно , если после каждого вызова функции вам пришлось обращаться then
num.add(5).multiply(3).answer();
в конце он не начнется с30
. Теперь начнется с последнего номераnew Test(promise)
после каждого вызова функции