我试图使用async / await和我的代码工作,我只是需要建议是否是使用async / await的正确方法,或者我需要 .then
这里 . 我有一个函数 loadDataForExport
- 返回带有生成数据的promise . 此外,我有 actionButtons
与异步事件功能,我使用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',,
},
]
1 回答
从我(太少)了解async / await如何工作,你正在以正确的方式做到这一点 . 我相信以下情况属实,如果我错了,请随时纠正我(我已准备好支付一些downvotes以更好地了解它是如何工作的):
Await将等待(通过生成器)在执行async函数的下一个语句之前解析给定的promise .
因此,
let dataForExport = await this.props.load(...)
将this.props.load(...)
的已解析值分配给dataForExport
.异步函数
loadDataForExport
将返回一个承诺,该承诺将使用dataForExport
的值进行解析,或者使用被拒绝的this.props.load()
的值拒绝,您可以像在loadDataForExport.event()
中一样使用等待