Если вы измените .uninstall
, чтобы он возвращал экземпляр (shellContainer
) при назначении его Promise свойству экземпляра и получении этого Promise в цепочечном вызове, да, это возможно:
class ShellContainer {
uninstall() {
// Chain or construct a Promise and assign the result to a property of the instance:
this.uninstProm = new Promise((resolve, reject) => {
// do stuff
});
return this;
}
dispose() {
return this.uninstProm.then(() => {
// do stuff
});
}
}
, а затем
await shellContainer
.uninstall()
.dispose()
разрешится после завершения dispose
.
Обратите внимание, что при таком подходе вызов uninstall
сам по себе может привести к неожиданному поведению, поскольку .uninsall
будет возвращать экземпляр синхронно, а не Promise. Вы можете рассмотреть дополнительный аргумент или что-то еще, чтобы указать, хотите ли вы связать вызов uninstall
с чем-то другим или хотите, чтобы обещание было возвращено напрямую, возможно, что-то вроде
class ShellContainer {
uninstall(doChain) {
// Chain or construct a Promise and assign the result to a property of the instance:
this.uninstProm = new Promise((resolve, reject) => {
// do stuff
});
return doChain ? this : this.uninstProm;
}
dispose() {
return this.uninstProm.then(() => {
// do stuff
});
}
}
и
await shellContainer
.uninstall(true)
.dispose()
или просто
await shellContainer.uninstall(); // no doChain argument
Но если будет только one Promise, во многих случаях await
не так много необходимости - это может вообще не сделать код более понятным. Например
after(async () => {
await shellContainer
.uninstall()
.dispose()
})
эквивалентно
after(() => shellContainer
.uninstall()
.dispose()
);