【发布时间】:2019-12-30 22:50:22
【问题描述】:
我有一个异步函数,其中一些事情似乎在其他事情乱序之前执行。我认为这是因为我正在使用异步函数。但是我怎样才能让它以正确的顺序执行(它的编写方式?)。我需要在每个这样的陈述之前加上await吗?
还是我的语法不正确?
async foodDelivered(order_id, table_id)
{
await let tmp_order_id = order_id
await let deliveryTime = 0
await this.btnDeliveredLoading = true
await const index = store.table_timers.findIndex(({ order_id }) => order_id === tmp_order_id)
await if (index != -1) {
// Stop timer
await clearInterval(store.table_timers[index].interval)
// Remove timer
await store.table_timers.splice(
store.table_timers.findIndex(({ order_id }) => order_id === tmp_order_id), 1
)
await deliveryTime = store.table_timers[index].time
}
try {
await OrderHistory.updateColor({
order_id: order_id,
table_id: table_id,
action: 'FOOD_DELIVERED',
})
// Save delivery time
await OrderHistory.saveDeliveryTime({
deliveryTime: deliveryTime,
order_id: order_id,
})
// Refresh
await OrderHistoryClass.getTotalOrderHistory({
date: moment().format('YYYY-MM-DD'),
})
let tables = await Data.getTables()
await store.tables = tables.data
await this.drawerOpened = false
}
await this.btnDeliveredLoading = false
},
【问题讨论】:
-
您应该只
await是async的东西(或者是/返回Promise)。是 in 这个函数还是 outside 这个函数(即你需要await这个函数的调用,以确保一切都在这里完成,如果你有代码取决于这是否完成)。 -
究竟发生了什么“乱序”?您是否确保您调用的所有异步函数都返回一个在完成之前没有实现的承诺?
-
“有些事情似乎在其他事情之前执行”:请提供一个可重现的例子。现在,您有许多我们不知道的函数调用,因此我们无法看到发生了什么。
标签: javascript asynchronous async-await es6-promise