async/await 如何直接获取返回值并赋值给一个参数?

2018-04-13 01:10:55 +08:00
 s609926202

最近开发小程序,需要用到 async/await 功能,如下(类似 vue.js 单页面开发):

export default class Index extends wepy.page {
    data = {
      ecAccessCount: {
        option: this.getAccessCountOption().then((res) => {
          // 问题在这里,getAccessCountOption()返回的是一个 promise 对象,该如何直接获取该对象里包含的值并赋值给 option 呢?因为 option 的值是一个{}对象。
          return res
        })
      }
    }
    
    async getAccessCountOption() {
      // 这里我创建两个对象,并在下面的 await 中通过 api 获取并处理得到的值,因为在 return 回的对象中需要用到这两个动态的值。
      let dataX = []
      let dataY = []

      await wepy.request({
        url: api.user.accessCount.url,
        method: api.user.accessCount.method
      }).then((res) => {
        res.data.data.map(function (item, index, array) {
          dataX.push(item.dimensions[0])
          dataY.push(item.metrics[0].values[0])
        })
      })
      
      return {
        legend: {
          data: ['会话数']
        },
        grid: {
          left: '0',
          right: '0',
          bottom: '2%',
          containLabel: true
        },
        xAxis: {
          type: 'category',
          data: dataX
        },
        yAxis: {
          type: 'value'
        },
        series: [
          {
            name: '会话数',
            data: dataY,
            type: 'line'
          }
        ]
      }
    }
}

上面就是遇到的问题,,getAccessCountOption()返回的是一个 promise 对象,该如何直接获取该对象里包含的值并赋值给 option 呢? option 接受一个对象作为参数。

11962 次点击
所在节点    问与答
7 条回复
Exin
2018-04-13 01:25:03 +08:00
```js
option: await this.getAccessCountOption()
```

这种问题搜一下 async/await 的基本用法就应该了然了,楼主误用了什么关键词?
zhoufenfens
2018-04-13 01:46:21 +08:00
既然你知道 getAccessCountOption 返回一个 promise,那就在外面再包一层 async 呗,await 独立使用确实会报 'await is a reserved word'的错误。
ecAccessCount: {
option:
(async function getACO() {
return this.getAccessCountOption().then((res) => {
return res
});
})()
}
zhoufenfens
2018-04-13 01:47:04 +08:00
排版不太好,但这个确实是可行的
grantonzhuang
2018-04-13 07:57:11 +08:00
@zhoufenfens 第一个 return 后面加一个 await,后面的 then 那些都可以不要了
DOLLOR
2018-04-13 10:18:51 +08:00
@zhoufenfens 这样做,option 仍然是一个 promise 对象。而且 this 已经指歪了……
s609926202
2018-04-13 10:40:50 +08:00
@Exin 你这样子写肯定不行的吧,,await 是要和 async 一起用的,,
Exin
2018-04-13 14:01:28 +08:00
@s609926202 噢,看漏了

你再把这个包进一个函数,然后在 constructor 里调用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX