【发布时间】:2020-09-18 13:36:14
【问题描述】:
如果我从下面提到的代码中删除了setTimeout,则代码块 (getUnderlyingData) 会在上一个响应之前运行。所以我没有得到正确的回应。请任何人帮助我解决这个问题。
当前代码:
await this.TableauService.initViz(this.TableauViz, this.DataContainer, this.DataURL).then(([uniqData, TableauViz]) => {
this.VizWorkbook = TableauViz;
setTimeout(() => {
this.SheetData = this.TableauService.getUnderlyingData(TableauViz, "KPI",(response) => {
console.log("sheet data",response);
});
},7000);
});
}
【问题讨论】:
-
首先,混合使用
async/await和.then几乎总是错误的。其次,为超时创建一个助手const delay = async ms => new Promise(resolve => setTimeout(resolve, ms));。这是直接使用 Promise 构造函数的罕见 案例之一,当您调整基于回调的 API(如setTimeout)时。用法:await delay(7000)
标签: javascript async-await es6-promise