Vue Exports.function语法

时间:2018-09-07 08:48:40

标签: javascript vue.js vue-component

我在单独的文件中具有这样的功能。

exports.getScore = (storeId) => {
  var getScore = new Promise(function (resolve, reject) {
    let data = this.getScore('day', storeId)
    data.then(function (result) {
      resolve(result)
    })
  })
  let result
  await getScore.then(function (data) {
    result = data
  })
  return result
}

任何人都可以通过语法帮助我,以便我可以异步运行,然后执行我的等待调用吗? 提前致谢。

1 个答案:

答案 0 :(得分:0)

对于您的问题,您只需要在函数之前放置async

exports.getScore = async (storeId) => { /* snip */ }

但是实际上您的代码中存在一些问题
首先,您可以在Promise执行者的决心中通过诺言

new Promise(resolve => {
  // This will work
  resolve(anotherPromise)
})

但是,如果您已经有了承诺,则可以直接将其退还
如果要确保它是本地Promise,或者不确定它是否是Promise。
将其包装在Promise.resolve

Promise.resolve(anotherPromiseOrValue)

因此您的代码可以更改为:

exports.getScore = (storeId) => this.getScore('day', storeId)

它也等于:

exports.getScore = this.getScore.bind(this, 'day')

但是还有另一个问题:这里的this是什么?
如果您从Vue方法中提取此函数,则this可能是Vue实例。
然后,我担心上面的代码无法按预期工作。
因此,我建议您仅在组件的生命周期挂钩中使用getScore,例如mounted

例如:

mounted () {
  this.getScore('day', this.storeId).then(score => {
    this.score = score
  })
}

或者使用async / await

async mounted () {
  this.score = await this.getScore('day', this.storeId)
}