等待是诺言中的保留字

时间:2018-08-27 00:20:39

标签: javascript

由于其他承诺,我试图使用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))
}

2 个答案:

答案 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)
    }
}