Jimmy
Jimmy

Reputation: 3860

Returning pending promises in async await

I am learning to use async / await and am having issues when trying to make an api request to set up my twilio device. Given the below code block, when I call device(), I get the following error message:

Uncaught 
TwilioException {message: "Capability token is not valid or missing."}
message
:
"Capability token is not valid or missing."
__proto__
:
Object

I believe this is due to the fact that the json returned in the device function is still shown as pending. How do I resolve this and what am I doing wrong? Thanks.

Code block:

import {Device} from 'twilio-client';

const api = async () => {
  try {
    const response = await fetch('/api/twilio');
    const json = await response.json();
    if (response.status === 403) {
      twilioConnectionFailure('Twilio has not been purchased.');
    }
    return json;
  } catch (error) {
    console.log(`Connection failed: ${error.message}`);
    throw Error(error.message);
  }
};

const device = () => {
  const json = api();
  Device.setup(json.token);
  return Device;
};

export default device;

Upvotes: 2

Views: 565

Answers (1)

Bergi
Bergi

Reputation: 664548

The api function is still asynchronous and returns a promise - you need to wait for it:

export default async function device() {
  const json = await api();
//             ^^^^^
  Device.setup(json.token);
  return Device;
}

Upvotes: 2

Related Questions