Passing arguments to a function using async/await

hidace picture hidace · Jul 17, 2017 · Viewed 13.9k times · Source

I'm trying to pass arguments to a function that uses async/await. I've defined my function like so

// common.js

export const myAsyncFunc = async (t, textA, textB) => {
  await t
    .typeText('#input-1', textA)
    .typeText('#input-2', textB);
};

However, when I try to import this function to another file, like so, I can't pass it t because t is not defined:

// index.js

import { myAsyncFunc } from './common'

myAsyncFunc(t, textA, textB)

Is it possible to just pass in my textA and textB arguments (possibly with currying or another way) with async/await?

EDIT: So this is being run as part of the test cafe library. It looks like t comes from when testcafe chrome client/__tests__/ is run, rather than being imported in the common.js file.

Answer

tiagodws picture tiagodws · Jul 17, 2017

You are importing/exporting myAsyncFunc, but in your code you are calling myAsyncFunction.

Also, you are chaining

.typeText('#input-1', textA)
.typeText('#input-2', textB);

But I think .typeText returns a promise, right? So you should:

export const myAsyncFunc = async (t, textA, textB) => {
  await t.typeText('#input-1', textA);
  await t.typeText('#input-2', textB);
};

Other than that, the code is working just fine, assuming you defined t somewhere, as pointed out in the comments.