由于其他承诺,我试图使用await,但是我收到消息Await is a reserved word
。
是否可以在承诺结果中使用await
?我想避免嵌套,所以我尝试使用await。
async function trigger(name) {
console.log(`Trigger calls from ${name}`)
return getConfiguration(name)
.then(cfg => {
let twilio = new TwilioHelper(
cfg.twilio_account_sid,
cfg.twilio_auth_token,
cfg.twilio_workspace_sid
)
twilio
.getWorkers()
.list({ taskQueueName: cfg.twilio_task_queue_name, available: 'true' })
.then(wrks => {
console.log('number of workers available', wrks.length)
let limit = wrks ? wrks.length : 0
let waitingCalls = await getWaitingCalls(name, limit)
waitingCalls.forEach(call => enqueueCall(call))
return {}
})
})
.catch(err => console.log('Error', err))
}
答案 0 :(得分:1)
这是可能的,但是这可能是您尝试在Promise处理程序的上下文中使用await
关键字的方式。您还需要通过在其上使用async
关键字来区分处理程序函数本身是异步的,如下所示:
.then(async wrks => { // Add async here
console.log('number of workers available', wrks.length)
let limit = wrks ? wrks.length : 0
let waitingCalls = await getWaitingCalls(name, limit) // Add await here
waitingCalls.forEach(call => enqueueCall(call))
return {}
})
或者,如果您也对此感兴趣,您应该可以仅通过trigger
来表达async/await
方法。
async function trigger(name) {
console.log(`Trigger calls from ${name}`)
try {
const cfg = await getConfiguration(name)
let twilio = new TwilioHelper(
cfg.twilio_account_sid,
cfg.twilio_auth_token,
cfg.twilio_workspace_sid
)
const workers = await twilio.getWorkers()
const wrks = await workers.list({
taskQueueName: cfg.twilio_task_queue_name,
available: 'true'
})
console.log('number of workers available', wrks.length)
let limit = wrks ? wrks.length : 0
let waitingCalls = async getWaitingCalls(name, limit)
waitingCalls.forEach(call => enqueueCall(call))
return {}
}
catch(err) {
console.log('Error', err)
}
}
答案 1 :(得分:1)
您应该能够按照以下方式编写函数:
async function trigger(name) {
console.log(`Trigger calls from ${name}`)
try {
let cfg = await getConfiguration(name)
let twilio = new TwilioHelper(
cfg.twilio_account_sid,
cfg.twilio_auth_token,
cfg.twilio_workspace_sid
)
let wrks = await twilio.getWorkers()
.list({ taskQueueName: cfg.twilio_task_queue_name, available: 'true' })
console.log('number of workers available', wrks.length)
let limit = wrks ? wrks.length : 0
let waitingCalls = getWaitingCalls(name, limit)
waitingCalls.forEach(call => enqueueCall(call))
return {}
} catch (error) {
console.log('Error', err)
}
}