Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待是承诺中的保留词_Javascript - Fatal编程技术网

Javascript 等待是承诺中的保留词

Javascript 等待是承诺中的保留词,javascript,Javascript,我试图使用wait作为其他承诺的结果,但我收到的消息wait是一个保留字 是否可以在承诺结果中使用wait?我想避免嵌套,所以我尝试使用wait async function trigger(name) { console.log(`Trigger calls from ${name}`) return getConfiguration(name) .then(cfg => { let twilio = new TwilioHelper( cfg

我试图使用wait作为其他承诺的结果,但我收到的消息
wait是一个保留字

是否可以在承诺结果中使用
wait
?我想避免嵌套,所以我尝试使用wait

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

这是可能的,但是这可能是您在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 {}
        })
或者,如果您对
触发器
方法感兴趣,则可以通过
异步/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)
    }
  }

您应该能够按如下方式编写函数:

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

只要函数是
async
,您就可以使用
await
(您发布的代码中没有使用
await
,那么有什么问题吗?)不客气,很高兴我能为您提供帮助-祝您的项目一切顺利:-)