So this is how it looks.
function async doAction() { await this.waitForData(); // do some other things after data loads // when data loads it's available in this.data } function waitForData() { if (!this.promise) { this.promise = new Promise(res => this.promiseResolve = res); return this.promise; } else { return Promise.resolve(this.data); } } function loadData(data) { //some things this.data = data; if (this.promiseResolve) { this.promiseResolve(this.data); } }
It works pretty fine, doAction
waits for data load and then action starts. But it’s pretty much code, is there a better way to do it?
Advertisement
Answer
There’s some bugs with concurrent calls or calls in unexpected sequence. I would do
function waitForData() { if (!this.promise) { this.promise = new Promise(res => this.promiseResolve = res); } return this.promise; } function loadData(data) { //some things this.data = data; if (this.promiseResolve) { this.promiseResolve(this.data); this.promiseResolve = null; } else { this.promise = Promise.resolve(this.data); } }
But other than that, yes this is the way to go for connecting two independent things by promises.