Question: I have written a code to return some data from asynchronous call using promise. While I try to execute I get "Syntax Error await is only valid in async function" and also I get Cannot proxy application requests...Error: connect ECONNREFUSED. 

I'm unsure why I get these errors

I have tried using async before the function calls, but it didn't work

```
var http = require('https');
var httpGet = function(url) {
  return new Promise (function(resolve, reject) {
    http.get(url,function(res) {
      res.setEncoding('utf8');
      var body = ''; 
      res.on('data', function(chunk){ 
        body += chunk;
        console.log("The body is "+ body);
      });
      res.on('end',function(){resolve(body);});
    }).on('error', reject);
  });
};

var body = await httpGet('link');
$.response.setBody(body);

```

I would want variable body to have the data returned from the httpGet function. Right now I'm getting the above mentioned errors. But without using await, I get the value of body as '{}'.

Please help

Answer: 
[`await`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await) can only be called in a function marked as [`async`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function). 
so, you can make an `async IIFE` and call the `httpGet` from there.

```
(async function(){
    var body = await httpGet('link');
    $.response.setBody(body);
})()

```

Basically when you use one `asynchronous` operation, you need to make the entire flow asynchronous as well. So the `async` keyword kindof uses ES6 generator function and makes it return a promise. 

You can check [this](https://javascript.info/async-await) out if you have confusion.
This is what worked for me.

I initially had:

```
exports.doSomething = functions.database.ref('/posts/{postId}').onCreate((snapshot, context) => {

    // ... 

    const [response] = await tasksClient.createTask({ parent: queuePath, task });
});

```

But I added the word `async` here (before the **open parentheses** to **snapshot**) and then the error went away

```
       // here
.onCreate(async (snapshot, context) => {

```

So now the code is

```
exports.doSomething = functions.database.ref('/posts/{postId}').onCreate(async (snapshot, context) => {

    // ... 

    const [response] = await tasksClient.createTask({ parent: queuePath, task });
});

```