Синтаксис Vue exports.function - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть такая функция в отдельном файле.

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 голосов
/ 07 сентября 2018

Для вашего вопроса вам просто нужно поставить async перед вашей функцией

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

Но на самом деле в вашем коде есть проблема
Во-первых, вы можете передать обещание в решении исполнителя Promise

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

Однако, если у вас уже есть обещание, вы можете просто вернуть его напрямую
Если вы хотите убедиться, что это родное обещание или вы не уверены, что это обещание или нет.
Оберните это в 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 mounted () {
  this.score = await this.getScore('day', this.storeId)
}
...