首页 文章

异步等待es6优化

提问于
浏览
2

我试图使用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 回答

  • 3

    从我(太少)了解async / await如何工作,你正在以正确的方式做到这一点 . 我相信以下情况属实,如果我错了,请随时纠正我(我已准备好支付一些downvotes以更好地了解它是如何工作的):

    Await将等待(通过生成器)在执行async函数的下一个语句之前解析给定的promise .

    因此, let dataForExport = await this.props.load(...)this.props.load(...) 的已解析值分配给 dataForExport .

    异步函数 loadDataForExport 将返回一个承诺,该承诺将使用 dataForExport 的值进行解析,或者使用被拒绝的 this.props.load() 的值拒绝,您可以像在 loadDataForExport.event() 中一样使用等待

相关问题