如何写出更好的 async/await + promise 代码?

How to write better async/await + promise code?

这就是它的样子。

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);
    }
}

它工作得很好,doAction 等待数据加载然后动作开始。不过代码有点多,有没有更好的方法呢?

并发调用或意外顺序调用存在一些错误。我愿意

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);
    }
}

但除此之外,是的,这是通过承诺连接两个独立事物的方式。