Javascript 异步等待es6优化
我正在尝试使用async/await,我的代码可以正常工作,我只需要关于使用async/await是正确的方法,还是我需要Javascript 异步等待es6优化,javascript,asynchronous,ecmascript-6,async-await,ecmascript-2017,Javascript,Asynchronous,Ecmascript 6,Async Await,Ecmascript 2017,我正在尝试使用async/await,我的代码可以正常工作,我只需要关于使用async/await是正确的方法,还是我需要。然后 在这里我有一个函数loadDataForExport——它返回promise和generate data。此外,我还有带有异步事件函数的actionbutton,其中我使用asyn/await,因为在另一种情况下let data=loadDataForExport()-返回承诺 loadDataForExport = async () => {
。然后
在这里我有一个函数loadDataForExport
——它返回promise和generate data。此外,我还有带有异步事件函数的actionbutton
,其中我使用asyn/await,因为在另一种情况下let data=loadDataForExport()
-返回承诺
loadDataForExport = async () => {
const {sort, search} = this.state
let dataForExport = await this.props.load({pageSize: this.props.totalCount, skip: 0, sort, search}).then(({entities: {devices, rooms}}) => Object.values(devices).map(({deviceType, deviceId, name, version, location, lastAliveMessage, deviceStatus}) => ({
deviceType,
deviceId,
name,
currentVersion: version,
location: location && rooms[location] ? rooms[location].name : '',
lastAliveMessage,
deviceStatus,
})))
return dataForExport
}
const actionButtons = loadDataForExport => [
{
event: async () => {
let data = await loadDataForExport()
exportToExcel(data)
},
name: 'exportToExcel',,
},
]
从我(太少)对async/await如何工作的理解来看,您的做法是正确的。我相信以下是正确的,如果我错了,请随时纠正我(我准备支付一些首付票,以便更好地了解它的工作原理):
Await将在执行异步函数的下一条语句之前(通过生成器)等待给定的承诺被解析
因此,let dataForExport=wait this.props.load(…)
将this.props.load(…)
的解析值分配给dataForExport
异步函数loadDataForExport
将返回一个承诺,该承诺要么用dataForExport
的值解析,要么用被拒绝的this.props.load()
的值拒绝,您可以像在loadDataForExport.event()
中一样使用wait,看起来很好。分配load的解析值是正确的,但是loadDataForExport函数将立即返回一个承诺。如果load导致错误或返回被拒绝的承诺,则GetProResultBySecriesFamily返回的承诺也将被拒绝。@好的,谢谢。试图根据您的评论编辑我的答案