如何写出更好的 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);
}
}
但除此之外,是的,这是通过承诺连接两个独立事物的方式。
这就是它的样子。
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);
}
}
但除此之外,是的,这是通过承诺连接两个独立事物的方式。