我在单独的文件中具有这样的功能。
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
}
任何人都可以通过语法帮助我,以便我可以异步运行,然后执行我的等待调用吗? 提前致谢。
答案 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)
}